如何从javascript突破一些功能?

时间:2018-11-06 11:40:26

标签: javascript jquery

我知道要突破$.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
    }
});

2 个答案:

答案 0 :(得分:1)

some is not jquerysome与元素匹配时将停止处理,因此返回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,它也会说同样的话。