2014-10-01 57 views
0

我是從一個API,它看起來像這樣得到的對象的列表:如何在for-in循環內打印出對象屬性?

{ 
    "results": [ 
    { 
     "date": "2014-09-25 19:00:00", 
     "title": "Hitjeskanon" 
    }, 
    { 
     "date": "2014-09-25 21:00:00", 
     "title": "Black & White ESN House & Techno" 
    }, 
    { 
     "date": "2014-09-25 21:00:00", 
     "title": "Hit It!" 
    } 
    ] 
} 

我現在瞭解從API這些結果,並希望記錄他們,這是我嘗試如下:

$.ajax({ 
    url: "/eventSearch/" + q, 
    cache: false, 
    success: function(result) { 
     console.log(result); 
     console.log(result['results']); 
     for (event in result['results']) { 
      console.log(event['title']); 
     } 
    } 
}); 

在控制檯中,我正確地看到前兩個日誌中的對象,但console.log(event['title'])僅打印undefined

我在這裏做錯了什麼?歡迎所有提示!

+1

嘗試使用別的東西而不是變量'event'。 – RichieAHB 2014-10-01 14:35:16

+0

不要使用'for ... in'來遍歷JavaScript中的數組。使用數字索引,或者使用'.forEach()'函數。 – Pointy 2014-10-01 14:36:31

+0

結果是一個數組,你需要一個簡單的for循環。也用var前綴事件。 – 2014-10-01 14:37:21

回答

3

result['results']實際上是一個數組。所以,你應該用正常的循環是for循環這樣

for (var i = 0; i < result['results'].length; i += 1) { 
    console.log(result['results'][i]['title']); 
} 

或者你可以用Array.prototype.forEach這樣

result['results'].forEach(function(currentObject) { 
    console.log(currentObject['title']); 
}); 

另外,還可以用點操作訪問屬性,像這樣

​​

console.log(currentObject.title); 
+1

...當然'result.results [i] .title'也可以工作:) – Pointy 2014-10-01 14:37:19

+0

另請參閱http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array - 對於這個帶有JavaScript數組問題的'for-in'的更多討論,可能會引入這樣一個壞主意。 – thohl 2014-10-01 15:53:23

0

可能使用傳統的for循環,但如果您不需要隨機訪問(例如,results[2]),則可以使用for...of語句(在ECMAScript6中引入)。在代碼中,只是改變for...infor...of

$.ajax({ 
    url: "/eventSearch/" + q, 
    cache: false, 
    success: function(result) { 
     console.log(result); 
     console.log(result['results']); 
     for (event of result['results']) { 
      console.log(event['title']); 
     } 
    } 
}); 

而像提到@thefourtheye,您可以訪問results陣列和事件的title屬性用點操作:

$.ajax({ 
    url: "/eventSearch/" + q, 
    cache: false, 
    success: function(result) { 
     console.log(result); 
     console.log(result.results); 
     for (event of result.results) { 
      console.log(event.title); 
     } 
    } 
}); 

這個網頁是一個很好的參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of