美文网首页
ES5-Array-filter

ES5-Array-filter

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

    filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回(新数组长度可能会变)。用法跟map极为相似(map新数组长度不会变)。

    • filter也要有return

    语法

    var new_array = arr.filter(callback, thisArg)
    

    它的第一个参数是一个函数,所有数组成员依次执行该函数,返回结果true的成员组成一个新数组返回。

    • 注意:该方法不会改变原数组。也不会对空数组进行检测。
    [1, 2, 3, 4, 5].filter(function (elem) {
      return (elem > 3);
    })
    // [4, 5]
    

    上面代码将大于3的数组成员,作为一个新数组返回。

    var arr = [0, 1, 'a', false];
    
    arr.filter(Boolean)
    // [1, "a"]
    

    上面代码中,filter方法返回数组arr里面所有布尔值为true的成员。

    • 注意:返回值只要是弱等于== true/false就可以了,而非返回 === true/false

    filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组。

    [1, 2, 3, 4, 5].filter(function (elem, index, arr) {
      return index % 2 === 0;
    });
    // [1, 3, 5]
    

    上面代码返回偶数位置的成员组成的新数组。

    filter方法还可以接受第二个参数,用来绑定参数函数内部的this变量。

    var obj = { MAX: 3 };
    var myFilter = function (item) {
      if (item > this.MAX) return true;
    };
    
    var arr = [2, 8, 3, 4, 1, 3, 2, 9];
    arr.filter(myFilter, obj) // [8, 4, 9]
    

    上面代码中,过滤器myFilter内部有this变量,它可以被filter方法的第二个参数obj绑定,返回大于3的成员。

    • 如果为 filter 提供一个 thisArg 参数,则它会被作为 callback 被调用时的 this 值。否则,callback 的 this 值在非严格模式下将是全局对象,严格模式下为 undefined。

    如果数组有<font color=red size=4>空位</font>,map方法的回调函数在这个位置不会执行,会跳过数组的空位。

    [1, , 3, 4, 5].filter(function (elem) {
      return (elem < 3);
    })
    //[1]
    

    相关文章

      网友评论

          本文标题:ES5-Array-filter

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