有没有办法打破Ember中的forEach迭代器?
我试图在回调中返回false(la jQuery),但它不起作用。
谢谢! PJ
答案 0 :(得分:12)
您可以使用Array#some
或Array#every
[1,2,3].some(function(element) {
return true; // Break the loop
});
[1,2,3].every(function(element) {
return false; // Break the loop
});
更多信息here
答案 1 :(得分:7)
Ember使用原生Array.prototype.forEach
(如果可用),如果没有则模仿它。请参阅https://github.com/emberjs/ember.js/blob/v1.0.0-rc.1/packages/ember-metal/lib/array.js#L45。
JavaScript的forEach
不支持破解。见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach
答案 2 :(得分:0)
不,我不这么认为cfr James,看着foreach代码,你可以看到它在引擎盖下使用了for循环。你可以抛出异常,但那就像编写spagetti代码一样。 但是有可能,你可以在github上做一个功能请求吗?或者编写自己的实现,在for循环中中断。
答案 3 :(得分:0)
使用Array#find并返回true以摆脱循环。
答案 4 :(得分:0)
使用toArray
可能会删除数组的顺序,这会破坏目的。您可以使用普通for循环,但使用objectAt
使其适合您。
var emberArray = [ ... Array of Ember objects ... ],
min = 3,
max = emberArray.get('length'),
targetObject;
for( var i = min; i < max; i++ ){
targetObject = emberArray.objectAt( i );
if( targetObject.get('breakHere') ) {
break;
}
}
这有一个额外的好处,允许你从某个索引开始,所以你可以遍历最小数量的项目。