首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >去重和求和数量

去重和求和数量
EN

Stack Overflow用户
提问于 2012-11-13 23:38:49
回答 4查看 1.3K关注 0票数 2
代码语言:javascript
运行
复制
var name = new Array();
var amount = new Array();
name[0]="Peter";
amount[0]="50";
name[1]="John";
amount[1]="10";
name[2]="John";
amount[2]="20";
name[3]="Peter";
amount[3]="20";
name[4]="Mary";
amount[4]="40";

我有类似上面的东西。我的问题是,如何创建一个函数来消除所有重复项并对数组中每个person的值求和?下面是我正在寻找的结果。

例如:

代码语言:javascript
运行
复制
Peter 70
John  30
Mary  40
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-13 23:42:09

请尝试以下操作

代码语言:javascript
运行
复制
var sum = {};
var i;
for (i = 0; i < amount.length; i++) {
  var name = name[i];
  var oldSum = sum[name];
  if (typeof oldSum === 'undefined') {
    oldSum = 0;
  }
  sum[name] = oldSum + amount[i];
}

现在,对于name中的每个名称,对象sum都将具有一个属性,该属性的值将是具有该名称的金额的总和

要将其打印出来,请尝试执行以下命令

代码语言:javascript
运行
复制
for (var prop in sum) {
  if (sum.hasOwnProperty(prop)) {
    console.log(prop + " " sum[prop]);
  }
}
票数 2
EN

Stack Overflow用户

发布于 2012-11-13 23:45:39

我不知道你是真的想修改数组,还是只想收集结果。

这是一种在对象中收集结果的方法。

代码语言:javascript
运行
复制
var result = name.reduce(function(res, n, i) {
    res[n] = (res[n] + +amount[i]) || +amount[i];
    return res;
}, {});

对于IE8和更低版本,.reduce()方法需要填充程序。

结果是:

代码语言:javascript
运行
复制
{
    "Peter": 70,
    "John": 30,
    "Mary": 40
}
票数 0
EN

Stack Overflow用户

发布于 2012-11-13 23:47:21

代码语言:javascript
运行
复制
result = {};
for( var i=name.length; i--; ) {
  result[name[i]] = result[ name[i] ] ? (result[name[i]] + parseInt( amount[i], 10 )) : parseInt( amount[i], 10 );
}
console.log( result );

返回

代码语言:javascript
运行
复制
{ Mary=40, Peter=70, John=30 }

当您以字符串形式给出amount[]值时,parseInt()是必需的。

调用后的result是一个保存求和后的值的对象,其中键是来自name[]的条目,值来自amount[]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13363751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档