const ArrayUtils = {}; ArrayUtils.unique = function(array) { return array.filter(function(elem, index, self) { return index === self.indexOf(elem); }); }; ArrayUtils.removeElement = function(array, element) { const index = array.indexOf(element); if (index < 0) return array; array.splice(index, 1); return array; }; // https://stackoverflow.com/a/10264318/561309 ArrayUtils.binarySearch = function(items, value) { var startIndex = 0, stopIndex = items.length - 1, middle = Math.floor((stopIndex + startIndex) / 2); while (items[middle] != value && startIndex < stopIndex) { // adjust search area if (value < items[middle]) { stopIndex = middle - 1; } else if (value > items[middle]) { startIndex = middle + 1; } // recalculate middle middle = Math.floor((stopIndex + startIndex) / 2); } // make sure it's the right value return items[middle] != value ? -1 : middle; }; ArrayUtils.findByKey = function(array, key, value) { for (let i = 0; i < array.length; i++) { const o = array[i]; if (typeof o !== 'object') continue; if (o[key] === value) return o; } return null; }; ArrayUtils.contentEquals = function(array1, array2) { if (array1 === array2) return true; if (!array1.length && !array2.length) return true; if (array1.length !== array2.length) return false; for (let i = 0; i < array1.length; i++) { const a1 = array1[i]; if (array2.indexOf(a1) < 0) return false; } return true; }; module.exports = ArrayUtils;