javascript - 需要将对象数组中的对象分组为一组

标签 javascript jquery arrays object

我有下一个数据:

const data = [
    {amount: 100, percent: 1, days: 7},
    {amount: 75, percent: 3, days: 8},
    {amount: 75, percent: 3, days: 3},
    {amount: 100, percent: 2, days: 5},
    {amount: 100, percent: 1, days: 10},
    {amount: 50, percent: 3, days: 9}
];

任务是按金额和百分比对对象进行分组,因此,如果不同对象中的金额和百分比相同,我需要添加它们的天数。 结果应该如下所示:

const data = [
    {amount: 100, percent: 1, days: 17},
    {amount: 75, percent: 3, days: 11},
    {amount: 100, percent: 2, days: 5},
    {amount: 50, percent: 3, days: 9}
];

由于百分比不同,第一个和第三个对象未分组。 我尝试过使用reduce方法:

const result = data.reduce((groupedByAmount, current) => {
    let amount = current.amount;
    let percent= current.percent;
    if (amount == amount && percent == percent) {
        groupedByAmount.amount = amount;
        current.days += current.days
    }
    return groupedByAmount
}, {
    amount: 0,
    percent: null,
    days: 0
});

我不知道如何检查金额和百分比是否相同,也许 map 或过滤器会有所帮助

最佳答案

考虑您建议的每种方法:

  • reduce => 将数组元素减少为单个值。可用于创建对象,然后将该对象转换回数组

  • map => 返回数组中每个值的值

  • 过滤器=>返回多个(或单个)匹配值

您可以循环遍历每个值,构建一个新数组并使用 filter() 查找要添加到的现有值。

注意:由于多次使用 .filter(),这对于大型数组可能表现不佳 - 使用复合键(将两个值组合成一个值)可​​能会表现更好.

const data = [
    {amount: 100, percent: 1, days: 7},
    {amount: 75, percent: 3, days: 8},
    {amount: 75, percent: 3, days: 3},
    {amount: 100, percent: 2, days: 5},
    {amount: 100, percent: 1, days: 10},
    {amount: 50, percent: 3, days: 9}
];

var result = [];

data.forEach(e => {
    var current = result.filter(d => d.amount == e.amount && d.percent == e.percent);
    if (current.length === 0) {
        result.push(e);
    } else {
        current[0].days += e.days;
    }
});
console.log(result);

关于javascript - 需要将对象数组中的对象分组为一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70576867/

相关文章:

javascript - 如何增强迭代回调的 javascript 函数?

javascript - 输入 input/contenteditable 时匹配特定单词

jquery - 包括这张 table 上的 THEAD 和 TBODY

javascript - jquery 单选按钮上出现意外标记

javascript - JQuery - 事件绑定(bind)和缓存元素

javascript - 更新生命周期

javascript - jQuery - 使用同时填充的另一个输入字段的值更改输入字段的名称

javascript - 使用数组调用 AngularJS 函数

python - 当传递给 "numpy.array"时,生成器不工作是一个错误吗?

arrays - 在Mathematica中使用数组和表函数。什么时候最好