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;