在 Javascript 中按对象 ID 分组

Group by Object ID's in Javascript

本文关键字:ID 分组 对象 Javascript      更新时间:2023-09-26

我有一系列ID和组织,如下所示:

var ids = ['1','2', '3'];
var orgs =
    [ 
      { name: "Org 1", id: 1 },
      { name: "Org 2", id: 2 },
      { name: "Org 3", id: 2 }
    ]

我想遍历这些以输出如下内容:

{
    1: [
        {name: "Org 1", id: 1}
    ],
    2: [
        {name: "Org 2", id: 2},
        {name: "Org 3", id: 2}
    ]
}

我试过这个没有成功:

var results = orgs.forEach(function (org) {
    if (results[org.id]) {
        results.push(org)
    } else {
        results[org.id] = [org]
    };
});

如果你不想使用像Underscore,Ramda或Lo-Dash这样的库,那么使用reduce编写这个非常简单:

var results = orgs.reduce(function(results, org) {
    (results[org.id] = results[org.id] || []).push(org);
    return results;
}, {})

你应该使用下划线并返回你的ID

http://underscorejs.org/#groupBy

_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); });
// => {1: [1.3], 2: [2.1, 2.4]}

您可能还想看看 Lo-dash