0

私は連想配列が初めてで、このコードを以下に示します。propとの値をsumprop[prop]新しい配列に代入したいと思いprop1ますprop2。ここでいくつかの助けに感謝します。

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

var sum = {};
var i;
var prop1 = new Array();
var prop2 = new Array();

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

for (var prop in sum) {
  if (sum.hasOwnProperty(prop)) {
    console.log(prop + " " sum[prop]);
    // assign to a new array
  }
}
4

3 に答える 3

3

意図をより明確にするためにコードを書き直しました(より良い変数名を使用し、データの構造を変更します):

var people = [
    { name: 'Peter', amount: 50 },
    { name: 'John', amount: 10 }
    // etc.    
];

var sums = {};
var i, person;

for (i = 0; i < people.length; i++) {
  person = people[i];
  if (typeof sums[person.name] === 'undefined') {
    sums[person.name] = 0;
  }
  sums[person.name] += person.amount;
} 

for (var name in sums) {
  if (sums.hasOwnProperty(name)) {
    console.log(name, sums[name]);
  }
}​

配列を強制的に辞書のように動作させようとしていますが、これは困難な戦いです。new Array()このような新しい配列を作成するだけでよいため、配列コンストラクター (つまり ) を使用する必要もありませんvar someVar = [];

于 2012-11-24T17:00:47.767 に答える
0

あなたはおそらく欲しい:

for (var prop in sum) {
  if (sum.hasOwnProperty(prop)) {

     prop1.push(prop);
     prop2.push(sum[prop]);

  }
}
于 2012-11-24T16:56:07.497 に答える
0

あなたはこれを求めている:

for (var prop in sum) {
  console.log(prop + " " sum[prop]);
  prop1.push(prop);
  prop2.push(sum[prop])
}

new Array()また、配列を初期化するときに使用しないでください。

var prop1 = [];
于 2012-11-24T17:00:51.287 に答える