乐趣区

关于html:JavaScript中forEach和filter的用法和原理

JavaScript 中有许多好用的数组办法,例如说 forEach,filter… 等等

那这些办法是都有什么用处呢?以及本人是否写一个办法进去代替呢?

<!–more–>

forEach 办法

日常用法

​ 咱们拿到一组数据的时候,通常须要通过遍历循环拿到本人想要的数据。forEach函数可能做到这一点,通常是这样应用的。例如说咱们上面数组这种,须要遍历循环这个数组。就能失去以下后果。

参数传递

forEach() 办法按升序为数组中含有效值的每一项执行一次 callback 函数。可顺次向 callback 函数传入三个参数:

  1. 数组以后项的值 (ele)
  2. 数组以后项的索引 (index)
  3. 数组对象自身 (self)
        var arr = [{name: 'abc', desc: '技术好', sex: 'm'}, 
            {name: 'adsds', desc: '技术好', sex: 'f'}, 
      {name: 'aaseed', desc: '技术好', sex: 'm'},
      {name: 'acccc', desc: '技术好', sex: 'f'}
    ]
    
    // forEach()
        arr.forEach(function (ele, index, self) {console.log(ele, ele.name, ele.sex);
        })

实现一个 forEach()办法
        Array.prototype.forEach = function (func) {
            var len = this.length;
            var _this = arguments[1] != undefined ? arguments[1] : window;
            //_this 值的是能够传递 this 指向
            for (var i = 0; i < len; i++) {func.apply(_this, [this[i], i, this]);
            }
        }
        var obj = {name: 'feng'}
        function deal(ele, index, self) {console.log(ele, index, self, this);
        }

    arr.forEach(deal, obj);

​ 就能失去一个性能雷同的办法

filter 办法

日常用法

filter() 办法创立一个新数组, 其蕴含通过所提供函数实现的测试的所有元素。MDN 如是说。例如说咱们想要失去下面数组中 name 为 accc 的数据

        var newArr = arr.filter(function (ele, index, array) {return ele.name == 'acccc'})

传递参数
  • callback

    用来测试数组的每个元素的函数。返回 true 示意该元素通过测试,保留该元素,false 则不保留。它承受以下三个参数:

    1. element数组中以后正在解决的元素。
    2. index可选正在解决的元素在数组中的索引。
    3. array可选调了 filter 的数组自身。
  • thisArg可选

    执行 callback 时,用于 this 的值。

实现一个 myfilter 办法()

​ 想到 filter 可能过滤想要的货色,那必定是有遍历的。

    Array.prototype.myfilter = function (func) {var arr = [];
            var len = this.length;
            var _this = arguments[1] || window;
            for (var i = 0; i < len; i++) {func.apply(_this, [this[i], i, this]) && arr.push(this[i]);
            }
            return arr;

        }
        var obj = {name: 'feng'}

        var newArr = arr.myfilter(function (ele, index, self) {if (ele.sex == 'm') {return true;} else {return false;}
        })
        console.log(newArr);

​ 咱们在调用 myfilter 办法把性别是男的过滤出来

本文由博客群发一文多发等经营工具平台 OpenWrite 公布

退出移动版