数组reduce用法

194 阅读1分钟

reduce

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
  1. total 初始值
  2. currentValue 调用方法的当前元素
  3. currentIndex 调用方法的当前元素索引(可选
  4. arr 当前元素所属的数组对象。
  5. initialValue 传递给函数的初始值 也就是 total 的值

查出每个数出现的次数

/*
  判断对象是否是数组/对象的元素/属性
  当list是数组时:’变量‘指的是‘索引’
  当list为对象时:’变量’指的是‘属性名‘
  */
  let list = [11, 11, 11, 22, 33, 44, 55, 99, 99, 99];
  let sum = list.reduce((pre, cur) => {
      if(cur in pre){
        pre[cur] ++
      }else{
        pre[cur] =1
      }
      return pre;
  }, {}); pre默认值设置为{}

去重

  let list = [11, 11, 11, 22, 33, 44, 55, 99, 99, 99];
  let sum = list.reduce((pre, cur) => {
      if(!pre.includes(cur)){
        return pre.concat(cur);  不会改变原属数组
      }else{
        return pre;
      }
  }, []); 

数组扁平化

1.list.flat(Infinity);
2.reduce
二维数组变一维

let list = [[11,22],[33,44],[55,66]];	
 let sum = list.reduce((pre, cur) => {
      return pre.concat(cur);
  }, []); 
多维数组变一维

 let list = [[88, [5, 6, 7], [5, 6, 88, [123]]]];
 let sum = function (list) {
    return list.reduce((pre, cur) => pre.concat(Array.isArray(cur) ? sum(cur) : cur), []);
  }

对象里的属性求和

  let json = [
    {
      name:'json1',
      number:10
    },
    {
      name:'json2',
      number:20
    },
  ]

  let sum = json.reduce((pre, cur) =>{
    return pre += cur.number
  },0)

数组中重复的数

var list = [1,2,1,2,3];
var newlist = [];
list.sort().sort((x,y)=>{
    x === y ? newlist.push(y) : ''
})
newlist // [3]