javascript - Groupby 不使用下划线 js

标签 javascript jquery grouping

我有一个按 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/

相关文章:

javascript - 检测鼠标在不可滚动的项目上滚动

javascript - 如何包装所有相邻且具有相同类的元素?

javascript - 如何以最佳性能接收未加载图像的错误事件

jquery - 在整个网站上弹出 Div? (在第一个页面加载时)

javascript - 实现摇动动画的更好方法?

javascript - Highcharts 饼图悬停时不透明度发生变化

python - 忽略外部分组并仅返回交替匹配的组

javascript - 我正在尝试使用reduce...重新组合数组数组,但失败了

javascript - 将 Knockout 绑定(bind)应用于页面的特定部分 : What am I doing wrong?

javascript - Google 可视化图表在单独的 Div 中的多个实例 [跟进]