我知道要突破$.each()
,我们可以使用return false
,尽管在some()
函数的情况下,此功能不起作用。有解决方案吗?
考虑我有一个对象数组myVar[]
。我的代码段是:
myVar.some(function(value) {
if(value.name == 'some name') {
return false; // is not breaking loop
}
});
尽管我使用
$.each(myVar, function(key, value) {
if(value.name == 'some name') {
return false; // is breaking loop
}
});
答案 0 :(得分:1)
some
is not jquery。 some
与元素匹配时将停止处理,因此返回true
some()方法测试数组中是否至少有一个元素 通过了由提供的功能实现的测试。
some()对存在于其中的每个元素执行一次回调函数 数组,直到找到其中回调返回真实值
的数组为止
答案 1 :(得分:0)
在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some中提供的some
用作Polyfill
的实现如下-
Array.prototype.some = function(fun, thisArg) {
'use strict';
if (this == null) {
throw new TypeError('Array.prototype.some called on null or undefined');
}
if (typeof fun !== 'function') {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
for (var i = 0; i < len; i++) {
if (i in t && fun.call(thisArg, t[i], i, t)) {
return true;
}
}
return false;
};
如果仔细看,如果找不到匹配项,则会遍历整个数组。即使您从回调函数返回false,也不会中断迭代。返回false表示您当前的商品不匹配。
要进一步细分,如果您的回调函数找到匹配的值,它将立即返回。但是,如果返回false,它将继续到数组的下一项。
for (var i = 0; i < len; i++) {
if (i in t && fun.call(thisArg, t[i], i, t)) {
return true;
}
}
如果您查看spec,它也会说同样的话。