2013-02-27 67 views
0

我嘗試循環遍歷整個數組,並查明它們是多麼「真實」。現在,當我運行該功能時,我得到一些未定義結果。 :(爲什麼爲什麼我在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 =' – 2013-02-27 14:26:17

+0

?結果的默認值是什麼 – PSR 2013-02-27 14:26:52

+0

當我嘗試時,已經有很多答案。發佈:D你可以檢查這個http://jsfiddle.net/8yTKf/ – Arpit 2013-02-27 14:29:27

回答

5

a)您未初始化的result值:

var result = 0; 

B)這不是你如何遍歷數組的項目:

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的答案一樣?以某種方式明確定義計數變量? – Crashthatch 2013-02-27 14:31:28

+2

@Crashthatch因爲數組對象可以用其他屬性擴展。然而,對於目前的任務來說,這並沒有多大意義。 – VisioN 2013-02-27 14:33:45

1

嘗試初始化的變量的實際值:var result = 0;

編輯:另外,按照Vision的答案,你需要檢查myArray[item].done

4

檢查result變量初始化與0。迭代還有一個問題,需要用myArray[item]來獲得對象屬性的值:

if (myArray[item].done === true) 
相關問題