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;