在 Javascript 中按对象 ID 分组

Ant*_*ony 1 javascript arrays

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

var ids = ['1','2', '3'];
var orgs =
    [ 
      { name: "Org 1", id: 1 },
      { name: "Org 2", id: 2 },
      { name: "Org 3", id: 2 }
    ]
Run Code Online (Sandbox Code Playgroud)

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

{
    1: [
        {name: "Org 1", id: 1}
    ],
    2: [
        {name: "Org 2", id: 2},
        {name: "Org 3", id: 2}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我试过这个没有成功:

var results = orgs.forEach(function (org) {
    if (results[org.id]) {
        results.push(org)
    } else {
        results[org.id] = [org]
    };
});
Run Code Online (Sandbox Code Playgroud)

Sco*_*yet 5

如果您不想使用像 Underscore、Ramda 或 Lo-Dash 这样的库,那么使用reduce以下代码编写它很简单:

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