JSFiddle - React, Tailwind, and code Playground
by etiennenoel
JavaScript
function OrderedArray(fieldToOrder, maxLength, order) {
var self = this;
self.fieldToOrder = '';
self.maxLength = -1;
self.order = 'ASC';
self.init = function(fieldToOrder, maxLength, order) {
self.fieldToOrder = fieldToOrder;
self.maxLength = maxLength || self.maxLength;
self.order = order || self.order;
}
self.array = [];
self.getLength = function(){
return self.array.length;
}
self.length = self.array.length;
self.getAt = function(index) {
return index >= 0 && index < self.getLength() ? self.array[index] : null;
}
self.addMultiple = function(elements) {
for(var i =0; i < elements.length; i++) {
self.add(elements[i]);
}
}
self.isSpaceLeft = function() {
if(self.maxLength == -1) {
return true;
}
else {
return (self.getLength() < self.maxLength);
}
}
self.binaryIndexOf = function(searchElement) {
var minIndex = 0;
var maxIndex = self.getLength() - 1;
var currentIndex;
var currentElement;
while(minIndex <= maxIndex) {
currentIndex = (minIndex + maxIndex) / 2 | 0;
currentElement = self.getAt(currentIndex);
var compareResult = self.compare(currentElement[self.fieldToOrder], searchElement[self.fieldToOrder]);
if(compareResult == null) {
return -1;
}
if(compareResult == -1 ) {
minIndex = currentIndex + 1;
}
else if(compareResult == 1) {
maxIndex = currentIndex - 1;
}
else {
return currentIndex;
}
}
//We use the bitwise operator to provide the ability to insert the element at the correct position using slice
return ~maxIndex;
}
self.search = function(searchElement) {
var index = self.binaryIndexOf(searchElement);
if(index == -1) {
return null;
}
return self.getAt(index);
}
self.orderSuggestionsBy = function(property) {
var sortOrder = 1;
if(property[0] === "-") {
sortOrder = -1;
...