当前位置: 首页 > 知识库问答 >
问题:

如何合并对象数组中的重复项并求和特定属性?[副本]

庞瀚
2023-03-14

我有这个对象数组:

var arr = [
    {
        name: 'John',
        contributions: 2
    },
    {
        name: 'Mary',
        contributions: 4
    },
    {
        name: 'John',
        contributions: 1
    },
    {
        name: 'Mary',
        contributions: 1
    }
];

…我想合并副本,但求和他们的贡献。结果如下:

var arr = [
    {
        name: 'John',
        contributions: 3
    },
    {
        name: 'Mary',
        contributions: 5
    }
];

我如何用JavaScript实现这一点呢?

共有2个答案

余善
2023-03-14

您还可以使用linq.js提供的linq框架来完成此操作

下面是我使用linq.js编写的代码,这几乎是sql语句。

null

var arr = [
    {
        name: 'John',
        contributions: 2
    },
    {
        name: 'Mary',
        contributions: 4
    },
    {
        name: 'John',
        contributions: 1
    },
    {
        name: 'Mary',
        contributions: 1
    }
];


var aggregatedObject = Enumerable.From(arr)
        .GroupBy("$.name", null,
                 function (key, g) {
                     return {
                       name: key,
                       contributions: g.Sum("$.contributions")
                     }
        })
        .ToArray();

console.log(aggregatedObject);
html lang-html prettyprint-override"><script src="http://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.min.js"></script>
郭琦
2023-03-14

您可以使用一个哈希表并生成一个包含所需总和的新数组

null

var arr = [{ name: 'John', contributions: 2 }, { name: 'Mary', contributions: 4 }, { name: 'John', contributions: 1 }, { name: 'Mary', contributions: 1 }],
    result = [];

arr.forEach(function (a) {
    if (!this[a.name]) {
        this[a.name] = { name: a.name, contributions: 0 };
        result.push(this[a.name]);
    }
    this[a.name].contributions += a.contributions;
}, Object.create(null));

console.log(result);
 类似资料:
  • 我想创建另一个数组,在其中添加重复的活动值 预期产出:

  • 我有: 我尝试使用map()和filter()实现myFunction,但无法使其正常工作。如果我有接近的想法,我会展示一些我尝试过的代码,不幸的是,情况并非如此。任何帮助都将不胜感激!

  • 我有一个这样的对象数组: 我希望每个人(名字)都有一个对象,并添加他们的对象。 因此,最终阵列将是: 我使用的真正数组非常大,这就是为什么我正在寻找最有效的方法。

  • 问题内容: 我有两个JavaScript数组: 我希望输出为: 输出数组应删除重复的单词。 如何在JavaScript中合并两个数组,以使每个数组中的唯一项按插入原始数组中的相同顺序获得? 问题答案: 仅合并数组(不删除重复项) ES5版本使用: ES6版本使用解构 由于没有“内置”方式来删除重复项ECMA-262实际上有这样做的好处),因此我们必须手动进行: 然后,使用它: 这也将保留数组的顺序

  • 我有一个这样定义的类: 现在我有一个项目对象列表,现在我想找到所有项目的总价。在Java8中我们如何做到这一点? 如果列表是简单的整数,那么我们在这里给出了解决方案--如何用java流求和整数列表?

  • 我有一个具有和属性的对象数组: 我想从所有对象中删除属性,并在控制台中打印,如