ES6的陣列方法--reduce
阿新 • • 發佈:2020-11-17
前言:
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 } },[])
更多用法。。。待續