2
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

4 に答える 4

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]);
  }
}
于 2012-11-13T15:42:08.627 に答える
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[]

resultafter the call は合計された値を保持するオブジェクトで、キーはエントリ fromname[]で、値は fromamount[]です。

于 2012-11-13T15:47:21.093 に答える
0

実際に配列を変更したいのか、単に結果を収集したいのかわかりません。

オブジェクトで結果を収集する方法を次に示します。

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

この.reduce()メソッドには、IE8 以下の shim が必要です。

結果は次のとおりです。

{
    "Peter": 70,
    "John": 30,
    "Mary": 40
}
于 2012-11-13T15:45:38.630 に答える
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]);
  }
}
于 2012-11-13T15:53:03.543 に答える