dy_*_*dy_ 200 javascript jquery underscore.js
我正在寻找一种方法来停止underscore.js _.each()
方法的迭代,但无法找到解决方案..each()
如果你这样做,jQuery 可能会破坏return false
.
有没有办法停止下划线每个()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
Run Code Online (Sandbox Code Playgroud)
aes*_*skr 266
你不能打破each
方法 - 它模仿本机forEach
方法的行为,并且本机forEach
不提供转义循环(除了抛出异常).
但是,所有的希望都不会丢失!您可以使用该Array.every
方法.:)
从该链接:
every
callback
为数组中的每个元素执行一次提供的函数,直到找到一个callback
返回false值的元素.如果找到这样的元素,则该every
方法立即返回false.
换句话说,你可以像这样做一些令人费解的事情(链接到JSFiddle):
[1, 2, 3, 4].every(function(n) {
alert(n);
return n !== 3;
});
Run Code Online (Sandbox Code Playgroud)
这将提醒1
通过3
,然后"破发"出来的循环.
你正在使用underscore.js,所以你会很高兴得知它确实提供了一种every
方法 - 他们称之为every
,但是当链接提到时,它们也提供了一个名为的别名all
.
Nik*_*hil 70
更新:
_.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
Run Code Online (Sandbox Code Playgroud)
**旧**
如果要有条件地跳出循环,请使用_.filter 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"}
Run Code Online (Sandbox Code Playgroud)
小智 15
你可以看一下_.some
而不是_.each
.
_.some
一旦谓词为真,就会停止遍历列表.结果可以存储在外部变量中.
_.some([1, 2, 3], function(v) {
if (v == 2) return true;
})
Run Code Online (Sandbox Code Playgroud)
见http://underscorejs.org/#some
归档时间: |
|
查看次数: |
133997 次 |
最近记录: |