2015-05-12 26 views
0

我確定我錯過了一些明顯的東西,但是當currentRecord發現它爲true時,下面的代碼不起作用。如何使用JavaScript中的函數從數組中返回一條記錄

什麼是迭代通過數組的最佳方式,當找到匹配項時,返回該記錄?我認爲forEach這裏是AngularJS的一部分。

function getCurrentRecord() { 

    homePageVideos.forEach(function(rec) { 
     if (rec.currentRecord === true){ 
      return rec; 
     } 
    }); 

} 
+0

看起來是正確的,你可以給我們提供一些更多的上下文 – Treesrule14

+0

你想返回所有匹配或只是第一場比賽?看看代碼,看起來你只想要第一個。 – Roberto

+0

是的。首先(只在我的情況下)。我的代碼應該如何工作?它似乎不是當我在鉻調試 –

回答

2

MDN documentationArray.prototype.forEach實現這一點:

注:有沒有辦法阻止或破壞forEach()循環。解決方案是使用Array.prototype.every()Array.prototype.some()。見下面的例子。

同樣爲angular.forEach

但如果你使用一個簡單的for循環,你可以做到這一點,像這樣:

for (var i=0; i < homePageVideos.length; i++){ 
    var rec = homePageVideos[i]; 
    if (rec.currentRecord === true){ 
    return rec; 
    } 
} 
+0

這是一個有趣的問題,當然這似乎是最好的答案。如果需要,MDN參考還包括一個polyfill。 – Roberto

0

JavaScript提供了幾個array iteration functions。我會使用filter(),但解決方案將取決於您所需的瀏覽器兼容性(IE9 +,FF1.5 +)。

function getCurrentRecord() { 
    return homePageVideos.filter(function(rec) { 
    return rec.currentRecord 
    }); 
} 
+1

爲什麼他的原始方式不工作? – Treesrule14

+0

爲什麼不提供更好的解決方案?問題是什麼是迭代和返回匹配的最佳方式。 – js1568

0

您可以簡單地使用角度過濾器。內部控制器,你可以通過使用$filter內部控制

function getCurrentRecord() { 
    var result = $filter('filter')(homePageVideos, true, true); //strict checking 
    return result.length > 0? result[0]: []; 
} 
相關問題