js 中 Array 對象上有很多提高開發效率的方法,reduce 是我之前用的最少的,今天看到一篇文章,講到了 reduce 的一種應用場景,碼者發揮了下想象力,翻譯之餘增加了點內容。
基本用法
reduce 在我之前的認知中,就是用來做累加或者累乘之類的操作的。比如下面求和的例子:
let arr = [1,2,3,4];
let sum = arr.reduce( (a, b) => a+b );
console.log(sum); // 10
我們可以給 reduce 方法設置一個初值:
let arr = [1];
let sum = arr.reduce( (a, b) => a+b, 100);
console.log(sum); // 101
複雜一點的數據結構:
let arr = [{num: 1}, {num: 2}, {num: 3}];
let sum = arr.reduce( (a, b) => ({
num: a.num+b.num
}));
console.log(sum); // 6
數組元素分類
有時候我們會需要把一個數組的元素分成幾個數組,比如對於[1, 2, 3, 4, 0, -2]
這個數組,把正數放在一個數組裏,把負數放在一個數組裏,如果不用 reduce,我們可以這樣:
let arr = [1,2,3,4,0,-2];
let nagetive=[], positive=[];
arr.forEach( item => {
if(item>0)
positive.push(item);
else
nagetive.push(item);
});
用 reduce 呢?
let arr = [1,2,3,4,0,-2];
let [nagetive, positive] = arr.reduce( (result, value) => {
if(value>0)
result[0].push(value);
else
result[1].push(value);
return result;
}, [[],[]]);
原本冗長的代碼不僅沒變得簡潔,還變得難懂了?!
不過碼者剛剛看到 reduce 這種用法時,還感覺這種用法好 nb 的樣子,直到下筆寫下上一行文字時,才發現,原來並沒有什麼好用的……………………………………不過不過不過,用來裝 b 大概還算有點市場。
對不起!