删除重复项并总结数量

时间:2012-11-13 15:38:49

标签: javascript arrays duplicates

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";

我有类似上面的内容。我的问题是,如何创建一个函数来消除所有重复项并总结数组中每个人的值?以下是我要找的结果。

例如:

Peter 70
John  30
Mary  40

4 个答案:

答案 0 :(得分:2)

尝试以下

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];
}

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

要打印出来,请尝试以下

for (var prop in sum) {
  if (sum.hasOwnProperty(prop)) {
    console.log(prop + " " sum[prop]);
  }
}

答案 1 :(得分:0)

我不知道你是否真的要修改数组,或只是收集结果。

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

var result = name.reduce(function(res, n, i) {
    res[n] = (res[n] + +amount[i]) || +amount[i];
    return res;
}, {});

.reduce()方法需要一个垫片用于IE8及更低版本。

结果是:

{
    "Peter": 70,
    "John": 30,
    "Mary": 40
}

答案 2 :(得分:0)

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 );

返回

{ Mary=40, Peter=70, John=30 }

parseInt()只需将amount[]值作为字符串提供。

调用后

result是一个包含总计值的对象,其中键是来自name[]的条目,值来自amount[]

答案 3 :(得分:0)

tally=[];
for(i=0;i<name.length;i++) {
  if(tally[name[i]]==undefined){
    tally[name[i]]=parseInt(amount[i]);
  }else{
    tally[name[i]]+=parseInt(amount[i]);
  }
}