Skip to content

Instantly share code, notes, and snippets.

@leebyron
Created January 30, 2017 21:42
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save leebyron/12a1ab08793fba0068456222b20d3b5b to your computer and use it in GitHub Desktop.
Save leebyron/12a1ab08793fba0068456222b20d3b5b to your computer and use it in GitHub Desktop.
Sort values by key order performance
var keys = [];
var results = [];
var keyCount = 100;
var iterations = 10000;
//generate keys 0 to <keycount>
for (var i=0; i < keyCount; i++) {
keys.push(i);
results.push({ id: i })
}
//order keys randomly
keys.sort(k => Math.random()-0.5);
//sort values by keys
function sortByKeys(keys, vals) {
var idx = [];
for (var i = 0; i < keys.length; i++) {
idx[keys[i]] = i;
}
return vals.sort((a, b) => idx[a.id]-idx[b.id])
}
console.time('sort-by-keys');
for (var j=0; j < iterations; j++) {
sortByKeys(keys, results);
}
console.timeEnd('sort-by-keys');
//push-filter reconcilation
console.time('push-filter');
for (var j=0; j < iterations; j++) {
var orderedResults = [];
for (var i=0; i < keys.length; i++) {
orderedResults.push(results.filter(r => r.id == keys[i])[0]);
}
}
console.timeEnd('push-filter');
//sort both keys and values
console.time('sort-both');
for (var j=0; j < iterations; j++) {
keys.sort((a, b) => a-b);
results.sort((a, b) => a.id-b.id);
}
console.timeEnd('sort-both');
/*
Sample output:
sort-by-keys: 100.108ms
push-filter: 2138.128ms
sort-both: 143.867ms
sort-by-keys: 93.903ms
push-filter: 2213.703ms
sort-both: 147.316ms
sort-by-keys: 128.899ms
push-filter: 2371.561ms
sort-both: 155.930ms
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment