我有一个按 ID 分组的集合。每个 id 包含对象数组。我想遍历它并创建一个目标集合,它将按“Id”列分组,如示例所示。我不会使用下划线js。我必须使用 javascript reduce 方法来实现这一点。
var targetCollection = [{
123456: [
{ "Id": "1", "name": "xxx", "age": "22" },
{ "Id": "1", "name": "yyy", "age": "15" },
{ "Id": "5", "name": "zzz", "age": "59" }
],
789456: [
{ "Id": "1", "name": "xxx", "age": "22" },
{ "Id": "1", "name": "yyy", "age": "15" },
{ "Id": "5", "name": "zzz", "age": "59" }
]
}]
var targetOutput = [{
123456: {
1: [{ "Id": "1", "name": "xxx", "age": "22" }, { "Id": "1", "name": "yyy", "age": "15" }],
5: [{ "Id": "5", "name": "zzz", "age": "59" }]
},
789456: {
1: [{ "Id": "1", "name": "xxx", "age": "22" }, { "Id": "1", "name": "yyy", "age": "15" }],
5: [{ "Id": "5", "name": "zzz", "age": "59" }]
}
}]
Code Snippet I have tried which didn't work
var newArray = [];
$.each(targetCollection, function (key, value) {
var newTarget = $(this);
var targetCollectionNew = newTarget.reduce(function (result, current) {
result[current.ParentAreaID] = result[current.ParentAreaID] || [];
result[current.ParentAreaID].push(current);
return result;
}, {});
newArray.push(targetCollectionNew);
});
console.log('newArray', newArray);
我试过使用数组归约方法,但没有成功。请帮我。
最佳答案
你最初尝试的问题是你需要有两个循环,因为在第一个循环中 newValue
是一个对象而不是数组,所以没有 reduce
方法在上面。
更简单的解决方案是使用 map(您可以使用 forEach
或 $.each
)并在第二个循环中减少(我使用简单的 for-in
)。
像这样:
var targetCollection = [{
123456: [
{ "Id": "1", "name": "xxx", "age": "22" },
{ "Id": "1", "name": "yyy", "age": "15" },
{ "Id": "5", "name": "zzz", "age": "59" }
],
789456: [
{ "Id": "1", "name": "xxx", "age": "22" },
{ "Id": "1", "name": "yyy", "age": "15" },
{ "Id": "5", "name": "zzz", "age": "59" }
]
}];
var result = targetCollection.map(function(obj) {
for (var key in obj) {
obj[key] = obj[key].reduce(function(prev, curr) {
if (!prev[curr.Id]) prev[curr.Id] = [];
prev[curr.Id].push(curr);
return prev;
}, {});
}
return obj;
});
document.write('<pre>' + JSON.stringify(result, null, 4) + '</pre>');
关于javascript - Groupby 不使用下划线 js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918725/