美文网首页
ES5-Array-some/every

ES5-Array-some/every

作者: chrisghb | 来源:发表于2019-06-10 22:22 被阅读0次

    some意指“某些”,指是否“某些项”合乎条件。与下面的every算是好基友,every表示是否“每一项”都要靠谱。

    some:数组中有一个元素返回真值,结果就为true。

    every:数组中有个元素不满足真值条件,结果就为false。


    some()

    some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回 false

    some 遍历的元素的范围在第一次调用 callback时就已经确定了。在调用 some 后被添加到数组中的值不会被 callback 访问到。

    语法

    array.some(callback,[ thisObject]);
    

    回调参数

    function(currentValue, index, arr)
    

    返回值

    布尔值。如果数组中有元素满足条件返回 true,否则返回 false

    例如下面的简单使用:

    var scores = [5, 8, 3, 10];
    var current = 7;
    
    function higherThanCurrent(score) {
      return score > current;
    }
    
    scores.some(higherThanCurrent)//true
    

    上面代码中,如果数组arr有一个成员大于等于3,some方法就返回true

    • 我们自然可以使用foreach进行判断,不过,相比some, foreach不会中断循环,some只要有true即返回<font color=red size=4>不再执行</font>
      了。

    IE6-IE8扩展如下:

    // 如果some不是函数
    if (typeof Array.prototype.some != "function") {
      // 函数表达式,fn和context为some传入参数
      Array.prototype.some = function (fn, context) {
        var passed = false;
        if (typeof fn === "function") {
          //[5, 8, 3, 10].some(fn, context),this代表原数组
          for (var k = 0, length = this.length; k < length; k++) {
              if (passed === true) break;
              //context绑定fn中this,
              //this[k], k, this为标准回调函数参数value,key,array
              passed = !!fn.call(context, this[k], k, this);
          }
            }
            
        return passed;
      };
    }
    =》应用:
    var scores = [5, 8, 3, 10];
    var current = 7;
    
    function higherThanCurrent(score) {
      return score > current;
    }
    scores.some(higherThanCurrent)
    

    every()

    every() 方法用于检测数组所有元素是否都符合指定条件
    如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。

    every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。。

    • every() 不会改变原始数组。

    语法

    arr.every(callback[, thisArg])
    

    例子:

    var arr = [1, 2, 3, 4, 5];
    arr.every(function (elem, index, arr) {
      return elem >= 3;
    });
    // false
    

    上面代码中,数组arr并非所有成员大于等于3,所以返回false。

    注意,对于空数组,some方法返回false,every方法返回true,回调函数都不会执行。

    function isEven(x) { return x % 2 === 0 }//return不执行
    
    [].some(isEven) // false
    [].every(isEven) // true
    

    兼容旧环境

    if (!Array.prototype.every)
    {
      Array.prototype.every = function(fun /*, thisArg */)
      {
        'use strict';
    
        if (this === void 0 || this === null)
          throw new TypeError();
    
        var t = Object(this);
        var len = t.length >>> 0;
        if (typeof fun !== 'function')
            throw new TypeError();
    
        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
        for (var i = 0; i < len; i++)
        {
          if (i in t && !fun.call(thisArg, t[i], i, t))
            return false;
        }
    
        return true;
      };
    }
    

    相关文章

      网友评论

          本文标题:ES5-Array-some/every

          本文链接:https://www.haomeiwen.com/subject/yjhxfctx.html