首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript -对同一字段上的2个对象数组进行排序

JavaScript -对同一字段上的2个对象数组进行排序
EN

Stack Overflow用户
提问于 2020-01-31 00:00:35
回答 7查看 73关注 0票数 1

在JavaScript中,我有两个对象数组,它们具有相同的对象,但顺序不同。我正在尝试弄清楚如何根据一个数组的顺序对另一个数组进行排序。它们都有一个独特的字段(下面是sortField),我只是不知道如何对其进行排序。下面是我的数组的一个例子:

排序数组:

代码语言:javascript
复制
[
  {
    "displayName": "Party",
    "sortField": "com.uniqueXbd",
    "elementId": "PtyListPanel"
  }, {
    "displayName": "Group",
    "sortField": "com.uniqueARd",
    "elementId": "GrpListPaneARd"
  }, {
    "displayName": "Leader",
    "sortField": "com.uniqueEcF",
    "elementId": "LeaderListPaneEcF"
  }
]

needsSorted数组:

代码语言:javascript
复制
[
  {
    "displayName": "Group",
    "sortField": "com.uniqueARd",
    "elementId": "GrpListPaneARd"
  }, {
    "displayName": "Leader",
    "sortField": "com.uniqueEcF",
    "elementId": "LeaderListPanel"
  }, {
    "displayName": "Party",
    "sortField": "com.uniqueXbd",
    "elementId": "PtyListPaneEcF"
  }
]

我猜它会是这样的?

代码语言:javascript
复制
  needsSorted.sort((a, b) => { 
    if(sorter.sortField...){
      return 1
  })

谢谢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2020-01-31 00:10:15

代码语言:javascript
复制
const output = [];
sortedArray.forEach( sortedItem => {
    const matchingItem = unsortedArray.find( unsortedItem => unsortedItem.sortField === sortedItem.sortField );
    if(matchingItem){
      output.push(matchingItem);
    }
});

因为您知道第二个数组是您希望第一个数组中的项的顺序,所以应该遍历它。然后从第一个列表中找到匹配的项目,并按该顺序将其推送到您的输出中。

票数 2
EN

Stack Overflow用户

发布于 2020-01-31 00:17:03

您可以进行排序查找,将排序关键字映射到原始数组中的索引。然后,在您的排序中,您可以在比较中查找这两个对象。

这用恒定时间的对象查找替换了每次比较时重复查找原始数组中的索引的需要,因此对于较大的数组,它应该以查找对象的空间为代价来提高性能。

代码语言:javascript
复制
let sortObj = [{"displayName": "Party","sortField": "com.uniqueXbd","elementId": "PtyListPanel"}, {"displayName": "Group","sortField": "com.uniqueARd","elementId": "GrpListPaneARd"}, {"displayName": "Leader","sortField": "com.uniqueEcF","elementId": "LeaderListPaneEcF"}]
let needsSorted = [{"displayName": "Group","sortField": "com.uniqueARd","elementId": "GrpListPaneARd"}, {"displayName": "Leader","sortField": "com.uniqueEcF","elementId": "LeaderListPanel"}, {"displayName": "Party","sortField": "com.uniqueXbd","elementId": "PtyListPaneEcF"}]

let sortLookup = sortObj.reduce((obj, item, idx) => {
    obj[item.sortField] = idx
    return obj
}, {})


needsSorted.sort((a,b) => sortLookup[a.sortField] - sortLookup[b.sortField])

console.log(needsSorted)

票数 0
EN

Stack Overflow用户

发布于 2020-01-31 00:13:03

代码语言:javascript
复制
   var obj = [
    {
        "one": 1,
        "two": 9
    }, {
        "one": 3,
        "two": 5
    }, {
        "one": 1,
        "two": 2
    }
];
var obj = [
    {
        "one": 1,
        "two": 2,
    }, {
        "one": 1,
        "two": 9
    }, {
        "one": 3,
        "two": 5
    }
];
obj.sort(function(a, b) {
    return a["one"] - b["one"] || a["two"] - b["two"];

});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59989923

复制
相关文章

相似问题

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