首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中按另一个属性排序时,有没有一种有效的方法来添加数组元素的原始索引值作为属性?

在JavaScript中按另一个属性排序时,有没有一种有效的方法来添加数组元素的原始索引值作为属性?
EN

Stack Overflow用户
提问于 2021-01-02 09:20:57
回答 2查看 25关注 0票数 1

AI有一个我正在按标题属性排序的数组:

代码语言:javascript
复制
    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存储在数组的每个元素中。

当然,我可以简单地在排序之前添加该属性,通过这样做:

代码语言:javascript
复制
for (var i=0; i<theArray.length; i++) {theArray.index = i);

在这种情况下,这样做有点浪费,因为我并不总是需要对Array进行排序。当最初创建数组时,它来自一些没有包含该属性的JSON。所以我在想,如果我可以在排序时添加属性,那可能是最好的。

有什么想法吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-01-02 09:24:53

您可以对索引数组进行排序,而不是对原始数组进行排序

代码语言:javascript
复制
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数组。

票数 2
EN

Stack Overflow用户

发布于 2021-01-02 09:23:43

在排序时创建一个新数组,使用help将会有所帮助:

代码语言:javascript
复制
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;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65535237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档