Supongamos que tengo una matriz de JavaScript, así:Javascript: Ordenar matriz y devolver una matriz de índices del que indica la posición de los elementos ordenados con respecto a los elementos originales
var test = ['b', 'c', 'd', 'a'];
Quiero ordenar la matriz . Obviamente, sólo puede hacer esto para ordenar la matriz:
test.sort(); //Now test is ['a', 'b', 'c', 'd']
Pero lo que realmente quiero es una serie de índices que indican la posición de los elementos ordenados con respecto a los elementos originales. No estoy muy seguro de cómo expresar esto, así que quizás es por eso que estoy teniendo problemas para descubrir cómo hacerlo.
Si tal método se llamó sortIndices(), a continuación, lo que yo quiero es:
var indices = test.sortIndices();
//At this point, I want indices to be [3, 0, 1, 2].
'a' era en la posición 3, 'b' fue a los 0, 'c' estaba en 1 y 'd' era un 2 en la matriz original. Por lo tanto, [3, 0, 1, 2].
Una solución sería ordenar una copia de la matriz, y luego recorrer la matriz ordenada y encontrar la posición de cada elemento en la matriz original. Pero, eso se siente torpe.
¿Existe un método existente que haga lo que yo quiero? Si no, ¿cómo escribirías un método que haga esto?
+1 pero creo que es mejor que no uses un bucle 'for .. in' en una matriz. – Tomalak
Esa es una buena idea. Le voy a dar una oportunidad. (Lo aceptaré una vez que lo haga funcionar.) – Jeremy
@Tomalak: Estoy de acuerdo con usted por ... en. Me he encontrado con muchos problemas. – Jeremy