繁体   English   中英

在排序时保留原始浮点数组的索引,然后反向排序以取回原始数组 js

[英]keep indexes of original array of floats at sorting, and reverse sort to get back the original array afterwards js

我有这个特殊的花车数组

segm3 = [0.0, 2.5, 3.62, 0.0, 2.5, 3.62, 0.0]

我希望在保留原始索引的同时对其进行排序。 这是我的代码:

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;})

当我尝试 console.log 索引时,我得到了这个

[
  0, 3, 6, 1,
  4, 2, 5
]

应该是对的,但是在对 segm3 进行排序之后,如何使用索引列表返回以形成原始 segm3 ?

要保留原始索引,您可以使用Array.prototype.map()Array.prototype.sort()

代码:

 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)

segm3.sort(function(a,b) {return ab})之后

只是

let resultArr;
for(var i=0;i<indices.length;i++){
        resultArr[indices[i]]=segm3[i]
    }

就这么简单,但我的心都融化了

根据segm3中的值对索引进行排序后,如果对segm3进行排序,则可以通过使用indices数组从排序的segm3数组中提取值来segm3 segm3 的原始顺序:

 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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM