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;
 ...