繁体   English   中英

用JavaScript迭代对象数组并通过键返回具有合并数组的新对象的JavaScript方法是什么?

[英]What is the JavaScript way of iterating Array of Objects and return new Object with merged arrays by key?

用Object键迭代对象数组并返回具有合并数组的新对象的JavaScript方法是什么?

原始对象数组:

this.obj = [
    {
        "name": "test name 1",
        "teams": [{
            "manage": false,
            "name": "my test team",
        }]
    },
    {
        "name": "test name 2",
        "teams": [{
            "manage": false,
            "name": "TEAM2",
        }]
    }
];

预期结果:

{
    "teams": [{
        "manage": true,
        "name": "TEAM2",
    }, {
        "manage": false,
        "name": "my test team",
    }]
}

我设法通过两个嵌套循环和一个变量来完成此任务。 在这种情况下,JavaScript的方式是什么?

let data = {'teams': []};

for (var i = this.obj.length - 1; i >= 0; i--) {
  for (var p = this.obj[i].teams.length - 1; p >= 0; p--) {
     data.teams.push(this.groups[i].teams[p]);
  }
}

您可以使用reduce()返回对象作为结果。

 var obj = [{"name":"test name 1","teams":[{"manage":false,"name":"my test team"}]},{"name":"test name 2","teams":[{"manage":false,"name":"TEAM2"}]}]; var result = obj.reduce(function(r, e) { r.teams = (r.teams || []).concat(e.teams) return r }, {}) console.log(result) 

您可以遍历数组和对象的键。 如果leys与name不相等,则使用相同的键将内容连接到结果数组。

 var data = [{ "name": "test name 1", "teams": [{ "manage": false, "name": "my test team", }] }, { "name": "test name 2", "teams": [{ "manage": false, "name": "TEAM2", }] }], result = {}; data.forEach(function (o) { Object.keys(o).forEach(function (k) { if (k !== 'name') { result[k] = (result[k] || []).concat(o[k]); } }); }); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

对于您的情况,我可能会使用数组Map方法。

 var data = [{ "name": "test name 1", "teams": [{ "manage": false, "name": "my test team", }] }, { "name": "test name 2", "teams": [{ "manage": false, "name": "TEAM2", }] }], result = {}; data.map(function(obj){ result.teams = (result.teams || []).concat(obj.teams) }); console.log(result); 

虽然,使用reduce方法可以为您提供解决方案。 它被我们用于不同的目的。 您可以在https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce中了解更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM