JS.Array.reduse 方法的一個應用場景

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 大概還算有點市場。

對不起!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章