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);