reduce与reduceRight 实现myReduce myReduceRight

reduce

归纳函数 返回一个新数组

[].reduce(function (prev, elem, index, arr) {
          
   }, initialValue);

第一个参数(回调函数)

回调函数中的第一个参数prev

表示上一次回调返回的值 第一次时为传入的第二个参数即initialValue

后三个参数

第二个参数

initialValue 与其他遍历方法不同的是 这个参数是必填项

var arr = [{
          
    id: 1 }, {
          
    id: 2 }, {
          
    id: 3 }, {
          
    id: 4 }, {
          
    id: 5 }];
      var initialValue = [];
      arr.reduce(function (prev, elem, index, arr) {
          
   
        console.log(prev, elem, index, arr);
      }, initialValue);

prev 就是 initialValue

var arr = [{
          
    id: 1 }, {
          
    id: 2 }, {
          
    id: 3 }, {
          
    id: 4 }, {
          
    id: 5 }];
      var initialValue = [];
      arr.reduce(function (prev, elem, index, arr) {
          
   
        console.log(prev === initialValue);
      }, initialValue);

必须每次return prev 才会有值 不会返回undefined

var arr = [{
          
    id: 1 }, {
          
    id: 2 }, {
          
    id: 3 }, {
          
    id: 4 }, {
          
    id: 5 }];
      var initialValue = [];
      arr.reduce(function (prev, elem, index, arr) {
          
   
        console.log(prev);
        return prev;
      }, initialValue);

每次遍历时都可以对prev进行处理

var arr = [{
          
    id: 1 }, {
          
    id: 2 }, {
          
    id: 3 }, {
          
    id: 4 }, {
          
    id: 5 }];
      var initialValue = [];
      var newArr = arr.reduce(function (prev, elem, index, arr) {
          
   
        prev.push(elem.id);
        console.log(prev);
        return prev;
      }, initialValue);

实现myReduce

Array.prototype.myReduce = function (fn, initialValue) {
          
   
        var arr = this,
          len = arr.length,
          arg2 = arguments[2] || window;
        for (var i = 0; i < len; i++) {
          
   
          initialValue = fn(initialValue, arr[i], i, arr);
        }
        return initialValue;
      };

reduceRight

var arr = [{
          
    id: 1 }, {
          
    id: 2 }, {
          
    id: 3 }, {
          
    id: 4 }, {
          
    id: 5 }];
      var initialValue = [];
      var newArr = arr.reduceRight(function (prev, elem, index, arr) {
          
   
        prev.push(elem.id);
        return prev;
      }, initialValue);

实现myReduceRight

Array.prototype.myReduceRight = function (fn, initialValue) {
          
   
        var arr = this,
          len = arr.length;
        for (var i = len - 1; i >= 0; i--) {
          
   
          initialValue = fn(initialValue, arr[i], i, arr);
        }
        return initialValue;
      };
经验分享 程序员 微信小程序 职场和发展