2013-02-27 6 views
0

Я пытаюсь пройти через весь массив и узнать, как они «истины». Теперь, когда я запускаю функцию, я получаю undefined-result. :(ПочемуПочему я не могу определить этот расчет в JavaScript?

myArray = [ 
    {text: 'hola', done: false}, 
    {text: 'hola', done: true}, 
    {text: 'hola', done: true}, 
    {text: 'hola', done: false}, 
    {text: 'hola', done: true} 
    ]; 

    var howMany = function(myArray){ 

    var result; 
     for (var item in myArray){ 
      if(myArray.done === true) 
      result++; 
     } 
     return result; 
    }; 


var items =howMany(myArray); 
    console.log(items) // I want to see if it's correct 
+2

'неопределенными + 1 =' –

+0

? что является значением по умолчанию для результата – PSR

+0

Когда я пытаюсь, есть уже много ans. Добавлено: D Вы можете проверить это http://jsfiddle.net/8yTKf/ – Arpit

ответ

5

а) Вы не инициализировать значение result:

var result = 0; 

б) Это не то, как вы итерацию по элементам массива:

for (var i = 0; i < myArray.length; i++) { 
    var item = myArray[i]; 
    if (item.done === true) { // <-- "item" here, not "myArray"! 
     result++; 
    } 
} 
+0

Почему ваш метод итерации лучше, чем использовать итерацию for-loop (как в вопросе), зафиксированную как в ответе VisioN? Явное определение переменной счетчика i в какой-то мере? – Crashthatch

+2

@Crashthatch Поскольку объект массива может быть расширен другими свойствами. Однако для текущей задачи это не имеет большого смысла. – VisioN

1

Попробуйте инициализацию переменного для фактического значения: var result = 0;

EDIT: Кроме того, в соответствии с ответом VISION, вы должны проверить myArray[item].done

4

Убедитесь, что result переменными инициализируются 0. И еще одна проблема на итерации. Для получения значения свойства объекта необходимо использовать myArray[item]:

if (myArray[item].done === true) 
Смежные вопросы