sort one array by another
without creating another array of n elements
by innerb
HTML
<span id="my-debug"></span>
JavaScript
// sort one array (of objects)
// by another array (of indicies)
var my_obj_array = ['a', 'b', 'c', 'd'];
var my_indicies = [3, 1, 0, 2];
// desired result ['d', 'b', 'a', 'c']
//var result = [];
//for (var i = 0; i < my_indicies.length; i++) {
// var j = my_indicies[i];
// result.push(my_obj_array[j]);
//}
// done right? ... not!
// if array is very large
// ie. don't want another large array
var temp = {};
for (var i = 0; i < my_indicies.length; i++) {
// creates a new object,
// but is only as big as needed
temp[i] = my_obj_array[i]; // preserve
var j = my_indicies[i];
if (j in temp) {
my_obj_array[i] = temp[j];
delete temp[j];
} else {
my_obj_array[i] = my_obj_array[j];
}
}
var my_debug = document.getElementById('my-debug');
my_debug.innerHTML = my_obj_array;