2015-05-12 25 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]: []; 
} 
相关问题