reduce( ) 函数

reduce( ) 方法接受一个函数作为累加器,数组中的每个值开始处理。

 

1 .计算数组总和

var num = [1,2,3,4,5];
var res = num.reduce(function(total,num){
    return total+num;  //return total + Math.round(num);//对数组元素四舍五入并计算总和
},0);

console.log(res);//15

// 没有初始值initialValue(即上面例子中的0),当数组为空时会抛出异常 提示reduce函数没有初始值,
// 所以为兼容性一般加上initialValue

 

 

2.合并二维数组

var red = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
 return a.concat(b);
}, []);

 

 

3、合并多维数组

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]

 

 

4、对象里的属性值求和

var result = [
    {
        subject: 'math',
        score: 10
    },
    {
        subject: 'chinese',
        score: 20
    },
    {
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    return cur.score + prev;
}, 0);
console.log(sum)  //60

 

 

5、统计一个数组中有多少个不重复的单词

 a)、不通过reduce实现

var arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
  var obj = {};
  for(var i= 0, l = arr.length; i< l; i++){
    var item = arr[i];
    obj[item] = (obj[item] +1 ) || 1;
  }
  return obj;
}

 

b)、通过reduce实现

var arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
  return arr.reduce(function(prev,next){
    prev[next] = (prev[next] + 1) || 1;
    return prev;
  },{});
}

 

    reduce(callback,initialValue)会传入两个参数,callback==》回调函数,initialValue==>初始值。当没有传入初始值时,prev是从数组中第一个元素开始的,next是数组的第二个元素;当传入初始值initalValue后,第一个将是initialValue,next是数组中的第一个元素。

 

 

6、数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);   // [1, 2, 3, 4]

 

 

7、累计函数的两个参数跟踪...

var arr = ["apple","orange"];
function noPassValue(){
  return arr.reduce(function(prev,next){
    console.log("prev:",prev);
    console.log("next:",next);
    return prev;
  });
}

function passValue(){
  return arr.reduce(function(prev,next){
    console.log("prev:",prev);
    console.log("next:",next);
    prev[next] = 1;
    return prev;
  },{});
}
console.log(
"No Additional parameter:",noPassValue()); console.log("----------------"); console.log("With {} as an additional parameter:",passValue());

 

   

 

posted on 2021-02-27 10:42  zhishiyv  阅读(1333)  评论(0编辑  收藏  举报

导航