2012-11-24 133 views
0

我相信新的關聯數組和我具有低於此代碼。我想分配值propsumprop[prop]到一個新的數組,prop1prop2。在這裏感謝一些幫助。分配值到一個新的數組

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

回答

0

你可能想:

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

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

    } 
} 
+0

我想PROP1來填充道具的價值。並且prop2充滿sum [prop]的值。如何打印出prop1的值? – user1033038

+0

@ user1033038你想如何打印出來? – 0x499602D2

+0

我試圖使用response.write(prop1)打印出來,這工作正常。但是當我嘗試打印response.write(prop2)時,它給了我一個錯誤「[Ljava.lang.Object; @ 280add8d」 – user1033038

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 = [];

+0

+1重新思考方法,而不是修補。 – Christophe

0

你想這樣的:

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

此外,初始化數組時不使用new Array(),用途:

var prop1 = [];