![](/img/trans.png)
[英]What is the proper way to match key and value from an array of objects and return a new object with only that key
[英]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.