1. 程式人生 > 實用技巧 >ES6的陣列方法--reduce

ES6的陣列方法--reduce

前言:

reduce方法好像平時很少用到它,但其實如果你真正的瞭解了它的話,我們可以在很多場景用到它,例如求陣列元素的出現次數,求和,求乘積等等。。下面我來帶大家去認識下它吧。

一、reduce語法

引用MDN文件裡對reduce的語法介紹:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

引數一:callback()回撥函式,回撥函式裡有4個引數。

  accumulator:它是上一次呼叫回撥時返回的累積值(第一次也有可能是initialValue)。

  currentValue:陣列中正在處理的元素。

  index:陣列中正在處理的當前元素的索引。 如果提供了initialValue,則起始索引號為0,否則從索引1起始。

  array:呼叫reduce()的陣列本身

引數二:initialValue:作為第一次呼叫callback函式時的第一個引數的值。 如果沒有提供初始值,則將使用陣列中的第一個元素。 注意在沒有初始值的空陣列上呼叫 reduce 將報錯。

引數繁多,是不是有點看不過來了?來點例項幫助掌握下。

二、reduce用法

1).簡單用法,求和求乘積

var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y,0)//加初始值,以防陣列為空時報錯
var mul = arr.reduce((x,y)=>x*y,1)

2).高階用法

a.陣列統計元素出現個數

var arr=['a','b','c','a'];
arr.reduce((prev,curr)=>{
    if(curr in prev){//判斷當前元素是否出現過
      prev[curr]++;
    }else{
      prev[curr]=1;
    }
    return prev
},{})

b.把二維陣列轉化為一維陣列

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
    
return pre.concat(cur) },[])

c.陣列去重

var arr=['a','b','c','a'];
arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      console.log(pre.concat(cur))
      return pre.concat(cur)
    }else{
      return pre
    }
},[])

更多用法。。。待續