JS-Reduceの使用方法と原理分析

1.使い方:

var arr = [1, 2, 3, 4, 5]
var result = arr.reduce(function(prev, curr) {
    return prev + curr
});
// result = 15

第二に、実現原理:

Array.prototype.myReduce = function(fn, initialValue) {
    if (this.length === 0) {
        if (initialValue === undefined) {
            console.error("reduce of empty array with no initialValue")
        } else {
            return initialValue
        }
    } else {
        var prev = initialValue !== undefined ? initialValue : this[0]
        var startIndex = initialValue !== undefined ? 0 : 1
        for (var i = startIndex; i < this.length; i++) {
            prev = fn(prev, this[i])
        }
        return prev
    }
}

3、使用分析:

function f1() {
  console.log("f1");
}
function f2() {
  console.log("f2");
}
function f3() {
  console.log("f3");
}

compose(f1,f2,f3)(); // f1,f2,f3

function compose(...funcs) {
  const len = funcs.length;
  if (len === 0) {
    return arg => arg;
  }
  if (len === 1) {
    return funcs[0];
  }

  return funcs.reduce((left, right) => {
    return (...args) => right(left(...args)) 
  });
}

funcs.reduce((left、right)=> {

          return(... args)=> right(left(... args))// newF

});

//この段落を分析します

prev = funcs [0]; //左-> f1

for(var i = 1; i <len; i ++){

       prev = fn(prev、funcs [i])// prev = fn(f1、f2)=(... args)=> f2(f1(... args)); sumFn最初のループ

                                            // prev = fn(sumFn、f3)=(... args)=> f3(sumFn(... args))2番目のループ

                                            // funcs.reduce =(... args)=> f3(sumFn(... args));戻り値

}

前へ戻る;

公開された35元の記事 ウォンの賞賛1 ビュー6718

おすすめ

転載: blog.csdn.net/qq_36162529/article/details/104371200