'Deseo ordenar una matriz en orden numérico, pero una vez ordenada, deseo poder encontrar el índice original.
Por ejemplo, la matriz original:
ptsGP = [3,8,2,5,6,9,8,4]
Estoy usando el siguiente código a continuación para ordenar la matriz:
arr = ptsGP;
var arr2 = arr.map(function(o, i){return {idx: i, obj: o}; }).sort(function(a, b) { return b.obj - a.obj; }); for(var i = 1, j = arr2.length; i <= j; i++){ document.write('i:' + i + ' = arr2[i].obj: PTS: ', arr2[i-1].obj+"<br/>"); }`Esto está bien ya que la matriz ordenada es:
arr = [2,3,4,5,6,8,8,9];
¿Cómo puedo encontrar el índice del número ordenado en la matriz original? En este caso sería:
El índice en la matriz original sería = [2,0,7,3,4,1,6,5]
Puede lograrlo siguiendo los pasos a continuación :
vía y luego vía comparación. Para obtener el índice correcto de valores duplicados, escribí una lógica basada en el recuento de valores duplicados.
Demostración de trabajo:
// Original array. const originalArray = [3, 8, 2, 5, 6, 9, 8, 4]; // Creating a deep copy of an original array. const deepCopy = [...originalArray].sort(function(a, b){ return ab }); // result array const arr = []; // count to get the index based on duplicate values. let count = 0; // Iterating deepCopy array to get the actual index. deepCopy.forEach((elem) => { // Checking for duplicate value in an array if (originalArray.indexOf(elem) === originalArray.lastIndexOf(elem)) { // This line of code execute if there is no duplicates in an array. arr.push(originalArray.indexOf(elem)) } else { // This line of code execute if there is duplicate values in an array. count++; // Inserting the index one by one. arr.push(originalArray.indexOf(elem, count)) } }); // Result array. console.log(arr);