gpt4 book ai didi

Javascript - 清除数组对象中的重复项

转载 作者:行者123 更新时间:2023-11-29 16:27:31 24 4
gpt4 key购买 nike

嗨我有一个 javascript 数组对象,表示在给定国家/地区销售的商品数量,如下所示:

var data = [{'c1':'USA', 'c2':'Item1', 'c3':100}, 
{'c1':'Canada', 'c2':'Item1', 'c3':120},
{'c1':'Italy', 'c2':'Item2', 'c3':140},
{'c1':'Italy', 'c2':'Item2', 'c3':110}]

我需要避免重复(如您所见,最后两个“记录”具有相同的国家/地区和相同的项目)并对金额求和;如果我从数据库获取数据,我会使用 DISTINCT SUM 子句,但在这种情况下又如何呢? jquery 有什么好的技巧吗?

最佳答案

您可以使用对象作为不同值的映射,如下所示:

var distincts, index, sum, entry, key;
distincts = {};
sum = 0;
for (index = 0; index < data.length; ++index) {
entry = data[index];
key = entry.c1 + "--sep--" + entry.c2;
if (!distincts[key]) {
distincts[key] = true;
sum += entry.c3;
}
}

工作原理:JavaScript 对象是映射,并且由于对属性的访问是一种极其常见的操作,因此一个不错的 JavaScript 实现会尝试使属性访问变得相当快(通过对属性键使用散列,诸如此类的事情)。您可以使用字符串作为名称并使用方括号 ([]) 来访问对象属性,因此 obj.fooobj["foo"] 都引用 objfoo 属性。

所以:

  1. 我们从一个没有属性的对象开始。
  2. 当我们循环遍历数组时,我们从 c1c2 创建唯一的键。重要的是“--sep--”字符串不能出现在c1c2中。如果大小写不重要,您可以在其中添加 .toLowerCase
  3. 如果 distincts 已经有该键的值,我们就知道我们以前见过它,并且可以忽略它;否则,我们添加一个值(在本例中为 true,但它可以是 falseundefined0 以外的任何值"") 作为标志,表明我们以前见过这种独特的组合。我们将 c3 添加到总和中。

但正如有人指出的那样,您的最后两个条目实际上并不相同;我猜这只是问题中的一个拼写错误......

关于Javascript - 清除数组对象中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4538788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com