在Javascript中按对象ID分组

时间:2014-12-03 20:53:25

标签: 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 }
    ]

我想循环遍历这些输出类似的内容:

{
    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]
    };
});

2 个答案:

答案 0 :(得分:3)

如果您不想使用像Underscore,Ramda或Lo-Dash这样的库,那么使用reduce编写此文件就足够简单了:

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

答案 1 :(得分:0)

您应该使用underscore并返回您的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