UNPKG

terriajs

Version:

Geospatial data visualization platform.

39 lines (34 loc) 1.35 kB
'use strict'; /** * Returns indices such that array[indices[i]] = sortedArray[i]. * Eg. sortedIndices(['c', 'a', 'b', 'd']) => [1, 2, 0, 3]. (The sorted array is [a, b, c, d], and "a" was in position 1, "b" in position 2, etc.) * @param {Array} array The array to sort. * @param {Function} [compareFunction] The usual compare function, eg. function(a, b) { return a - b }. * @return {Array} The sorted indices, such that array[sortedIndices[0]] = sortedArray[0]. */ function sortedIndices(array, compareFunction) { var length = array.length; var indices = new Array(length); for (var i = 0; i < length; i++) { indices[i] = i; } if (!compareFunction) { compareFunction = function(a, b) { return (a < b) ? -1 : (a > b) ? 1 : 0; }; } indices.sort(function(a, b) { return compareFunction(array[a], array[b]); }); return indices; } // // Note: for indices which go in the other direction, just use indexOf like this: // // it('inverse indices work', function() { // var data = ['c', 'a', 'b', 'd']; // var sorted = data.slice().sort(); // var inverseIndices = data.map(function(datum) { return sorted.indexOf(datum); }); // expect(inverseIndices).toEqual([2, 0, 1, 3]); // }); module.exports = sortedIndices;