JavaScript: ordera una matriz basada en otra matriz de integers

Digamos que tengo una matriz: [0,3,4,2,5,1]

Lo que quiero hacer es orderar una matriz como:

 ["one", "two", "three", "four", "five", "six"] 

para que la order corresponda a la primera matriz.

Este sería el resultado:

 ["one", "four", "five", "three", "six", "two"] 

¿Hay una manera fácil de lograr esto?

Puedes hacer algo como esto:

 function getSorted(arr, sortArr) { var result = []; for(var i=0; i<arr.length; i++) { result[i] = arr[sortArr[i]]; } return result; } 

Puedes probarlo aquí .

Nota: esto supone que las matrices que transfiere son equivalentes en tamaño, deberá agregar algunas verificaciones adicionales si este no es el caso.

 ordenetworkingArray= function(arr,order){ return order.map(function(itm){return arr[itm]}); } var sequence= [0, 3, 4, 2, 5, 1],arr=["one","two","three","four","five","six"] arr=new ordenetworkingArray(arr,sequence); /* returned value: (Array) one,four,five,three,six,two */ 

// Puede hacer que el pedido sea una propiedad no indexada de la matriz // y llamar a array.ordenetworking ()

 Array.prototype.ordenetworking= function(order){ var arr= this; order=order || this.order; return order.map(function(itm){ return arr[itm]; }); } var arr= ["one","two","three","four","five","six"], sequence= [0, 3, 4, 2, 5, 1]; arr.order=sequence; arr.ordenetworking() /* returned value: (Array) one,four,five,three,six,two */ 

Me preguntaron esto en una entrevista telefónica. Luego hazlo sin crear otra matriz, suponiendo que la matriz es muy grande. No sé si esta es la respuesta, ya que no pude hacerlo en la llamada (maldición!), Pero esto es lo que se me ocurrió.

 var my_obj_array = ['a', 'b', 'c', 'd']; var my_indicies = [3, 1, 0, 2]; // desinetworking result ['d', 'b', 'a', 'c'] var temp = {}; for (var i = 0; i < my_indicies.length; i++) { 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]; } } 

http://jsfiddle.net/innerb/RENjW/

No se trata de cómo obtienes tu primer set, pero podrías usar una matriz de objects en lugar de [0,3,4,2,5,1] :

 var arr = [ {n:0, s:'one'}, {n:3, s:'four'}, {n:4, s:'five'}, {n:2, s:'three'}, {n:5, s:'six'}, {n:1, s:'two'} ] 

Y evite procesarlo.

 class test1 { public static String[] sort(int[] array,String[] str) { String[] out=new String[str.length]; for(int i=0;i<str.length;i++) { out[i]=str[array[i]]; } return out; } }