Tengo esta matriz particular de flotadores
segm3 = [0.0, 2.5, 3.62, 0.0, 2.5, 3.62, 0.0]
Deseo ordenarlo manteniendo los índices originales. Este es mi código:
var indices = Array.from(Array(segm3.length).keys()) .sort(function(a,b) { if (segm3[a] > segm3[b]) return 1; else if (segm3[a]<segm3[b]) return -1 ;else return 0;})cuando trato de consola.log los índices me sale esto
[ 0, 3, 6, 1, 4, 2, 5 ]Debería ser correcto, pero después de ordenar segm3, ¿cómo puedo volver a formar el segm3 original con el uso de la lista de índices?
Para mantener los índices originales, puede usar Array.prototype.map() y Array.prototype.sort() :
Código:
const segm3 = [0.0, 2.5, 3.62, 0.0, 2.5, 3.62, 0.0] const segm3SortedWithIndexes = segm3 .map((f, i) => ({ floatNumber: f, index: i, // <-- original index })) .sort((a, b) => a.floatNumber - b.floatNumber) console.log('"segm3" with original index:', segm3SortedWithIndexes) const result = segm3SortedWithIndexes.map(({ floatNumber: f }) => f) console.log('"segm3" sorted:', result)después de segm3.sort(function(a,b) {return ab})
sólo
let resultArr; for(var i=0;i<indices.length;i++){ resultArr[indices[i]]=segm3[i] }Era tan simple como eso, pero mi mente se derritió
Después de haber ordenado los índices de acuerdo con los valores en segm3 , si luego ordena segm3 , puede restaurar el orden original de segm3 usando la matriz de indices para extraer los valores de la matriz segm3 ordenada:
const segm3 = [0.0, 2.5, 3.62, 0.0, 2.5, 3.62, 0.0] console.log(JSON.stringify(segm3)) let indices = Array.from(Array(segm3.length).keys()) .sort((a,b) => segm3[a] - segm3[b]) console.log(JSON.stringify(indices)) segm3.sort((a,b) => a - b); console.log(JSON.stringify(segm3)) let origsegm3 = indices.map(i => segm3[i]) console.log(JSON.stringify(origsegm3))