2012-11-24 1 views
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 
    } 
} 

ответ

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