2013-12-08 4 views
0
var numbers = [{grades:[100,100,100]}]; 
var result = 0; 

for (var i=0;i<numbers.length;i++){ 
    for (var p in numbers.grades[i]); 

    result+=p+":"+numbers[i][p]; 
    //console.log(p+":"+numbers[i][p]) 
    console.log(result); 
} 

Это то, что у меня есть до сих пор. Я знаю, как получить все числа в .grades, но я хочу, чтобы все они были добавлены очень простым способом.Добавление номеров в массив объектов

ответ

3

Проблема у вас есть numbers.length только 1. Вы хотите

numbers[0].grades.length; // 3 

Это должно суммировать оценки для вас

for (var i=0, sum=0; i<numbers[0].grades.length; i++) { 
    sum += numbers[0].grades[i]; 
} 

sum; // 300 

Если у вас есть доступ к Array.prototype.reduce, вы могли бы использовать этот

var sum = numbers[0].grades.reduce(function(a, b) { return a + b; }, 0); 

sum; // 300 

Примечание.reduce требует ECMAScript >= 5 и wi не буду работать в IE <= 8

+0

Отличное решение! В этом сценарии безопасно принимать числа [0], но мы должны обернуть сокращение в функцию numbers.forEach, чтобы включить любую будущую разработку. –

0

или вы можете попробовать:

for(var j=0; j<numbers.length;j++) 
{ 
    for (var i=0, sum=0; i<numbers[j].grades.length; i++) { 
    sum += numbers[j].grades[i]; 
    } 
} 
console.log(sum); 
0

список, который вы хотите перебрать является:

var list = numbers[0].grades; 

Затем внутри цикла:

result += list[i]; 

Вот и все :)


Как просматривать яваскрипт массива:

var a = ['I', 'need', 'the', 'basics']; 
console.log(a[0]); // "I" 
console.log(a[3]); // "basics" 
console.log(a[a.length - 1]); // "basics" 

Как просматривать JavaScript Object:

var o = { a: 'I', b: 'need', c: 'the', d: 'basics' }; 
console.log(o.a); // "I" 
console.log(o.d); // "basics" 
console.log(o['d']); // "basics" 

Все вместе:

var mixed = [{ a: 'foo' }, { b: 'bar' }, { c: ['baz'] }]; 
console.log(mixed[0].a); // "foo" 
console.log(mixed[1].b); // "bar" 
console.log(mixed[2].c[0]); // "baz" 

сложить все оценки :

var grades, i, j; 
var sum = 0; 
var list = [ 
    { grades: [1, 2, 3] }, 
    { grades: [4, 5, 6] } 
]; 

for (i = 0; i < list.length; i++) { 
    grades = list[i].grades; 
    for (j = 0; j < grades.length; j++) { 
     sum += grades[j]; 
    } 
} 

console.log(sum); // 21 
+0

THANKS GUYS ... первый раз на этом сайте, и мне это нравится !!!!! – KittenCornBall

+0

@ user3079589 Отлично: D Но вы должны скорее выразить свой энтузиазм путем голосования или, приняв ваш любимый ответ: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235# 5235. Продолжайте пользоваться: D – leaf

0

Более функциональный/JavaScript подход будет использовать array.reduce():

var sum = numbers[0].grades.reduce(function(previousValue, currentValue, index, array){ 
    return previousValue + currentValue; 
}); 

console.log(sum); 
1

Вы чуть было это

var numbers = [{grades:[100,100,100]}]; 
var result = 0; 

for (var i=0;i<numbers.length;i++){ 
    for (var g=0; g<numbers[i].grades.length; g++) { 

    result = result+numbers[i].grades[g]; 
    console.log(result); 
    } 
} 

Как описано выше, если он поддерживает ES5, вы можете записать его как это:

var numbers = [{grades:[100,100,100]}]; 
var result = 0; 

numbers.forEach(function(val) { 
    result = result + val.grades.reduce(function (previousValue, currentValue, index, array) { 
     return previousValue + currentValue; 
    }) 
}); 

просто помните, что вам нужно прокручивать массив чисел, вместо того чтобы давать ему значение по умолчанию «0» // номера [0] и т. Д.

Смежные вопросы