我正在寻找一种方法来停止下划线.js _.each()方法的迭代,但找不到解决方案。如果返回false, jQuery .each()会中断。

是否有方法停止用下划线each()?

_([1,2,3]).each(function(v){
    if (v==2) return /*what?*/;
})

当前回答

你不能用下划线打断forEach,因为它模仿EcmaScript 5本机行为。

其他回答

我相信如果你的数组实际上是一个对象,你可以返回一个空对象。

_.({1,2,3,4,5}).each(function(v){  
  if(v===3) return {}; 
});

和其他答案一样,这是不可能的。 下面是第21期中关于断路器的评论

对我来说很有效

var arr2 = _.filter(arr, function(item){
    if ( item == 3 ) return item;
});

更新:

_。Find会更好,因为它会在找到元素时跳出循环:

var searchArr = [{id:1,text:"foo"},{id:2,text:"bar"}];
var count = 0;
var filteredEl = _.find(searchArr,function(arrEl){ 
              count = count +1;
              if(arrEl.id === 1 ){
                  return arrEl;
              }
            });

console.log(filteredEl);
//since we are searching the first element in the array, the count will be one
console.log(count);
//output: filteredEl : {id:1,text:"foo"} , count: 1

**老**

如果你想有条件地跳出循环,使用_。过滤API而不是_.each。下面是一个代码片段

var searchArr = [{id:1,text:"foo"},{id:2,text:"bar"}];
var filteredEl = _.filter(searchArr,function(arrEl){ 
                  if(arrEl.id === 1 ){
                      return arrEl;
                  }
                });
console.log(filteredEl);
//output: {id:1,text:"foo"}

也许你需要使用下划线的any()或find(),它们在满足条件时将停止处理。