ES6扩展内容(reduce)

389 阅读1分钟

1,求和

var  arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24

2,多个数据变一个数据

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
   return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

3,组合多个函数

function sum(a,b){
    return a+b;
}
function toUpper(str){
    return str.toUpperCase();
}
function add(str){
    return "***"+str+"***";
}
function compose(...fns){ // [add,toUpper,sum];
    return function(...args){
        let lastFn = fns.pop();
        return fns.reduceRight((a,b)=>{
            return b(a)
        },lastFn(...args));
    }
}
// let compose = (...fns) => (...args)=>{
//     let lastFn = fns.pop();
//     return fns.reduceRight((a,b)=>b(a),lastFn(...args));
// }

let r = compose(add,toUpper,sum)('abcd','18');

4,实现reduce

Array.prototype.reduce = function(callback,prev){
    // this = [1,2,3]
    for(let i = 0; i< this.length;i++){
       if(prev == undefined){
           // this[i] = 1  this[i+1] = 2
         prev = callback(this[i],this[i+1],i+1,this);
         i++;
       }else{
         prev = callback(prev,this[i],i,this);
       }
    }
    return prev;
};
// 平均数 求幂 
let r = [1,2,3].reduce((a,b,index,current)=>{
    return a+b;
},100)
console.log(r);