AI有一个我正在按标题属性排序的数组:
theArray.sort(function(a, b) {
var titleA = a.title.toLowerCase();
var titleB = b.title.toLowerCase();
return (titleA < titleB) ? -1 : (titleA > titleB) ? 1 : 0;
});这很好用,但除了获得排序的Array之外,我还希望保留原始的Array索引值用于其他目的(它们指向另一个Array)。我想把它作为一个属性.idx存储在数组的每个元素中。
当然,我可以简单地在排序之前添加该属性,通过这样做:
for (var i=0; i<theArray.length; i++) {theArray.index = i);在这种情况下,这样做有点浪费,因为我并不总是需要对Array进行排序。当最初创建数组时,它来自一些没有包含该属性的JSON。所以我在想,如果我可以在排序时添加属性,那可能是最好的。
有什么想法吗?谢谢。
发布于 2021-01-02 09:24:53
您可以对索引数组进行排序,而不是对原始数组进行排序
const getTitle = i => theArray[i].title.toLowerCase();
const indicies = theArray.map((_, i) => i);
indicies.sort((indA, indB) => getTitle(indB).localeCompare(getTitle(indA)));然后,当您需要对“排序”数组执行某些操作时,遍历索引并访问theArray[i]。当您需要对已排序的索引执行某些操作时,只需迭代indicies数组。
发布于 2021-01-02 09:23:43
在排序时创建一个新数组,使用help将会有所帮助:
const newArray = [...theArray].sort(function(a, b) {
var titleA = a.title.toLowerCase();
var titleB = b.title.toLowerCase();
return (titleA < titleB) ? -1 : (titleA > titleB) ? 1 : 0;
});https://stackoverflow.com/questions/65535237
复制相似问题