溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中reduce怎么用

發布時間:2021-09-29 13:41:28 來源:億速云 閱讀:137 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關JS中reduce怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

reduce方法是一個數組的迭代方法,和map、filter不同,reduce方法可緩存一個變量,迭代時我們可以操作這個變量,然后返回它。

這是我大白話的解釋,可能還是不容易理解,下面看例子吧

1. 數組累加

數組累加是項目經常遇到的,比如計算商品總價等,使用reduce就可以一行代碼搞定,而且不用定義外部變量,reduce是完全無副作用的函數。

// 累加
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a + i);
// 輸出:36

// 累加,默認一個初始值
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a + i, 5);
// 輸出:41

// 累乘
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a * i);
// 輸出:40320

2. 找出數組最大值

在數組每次的迭代中,我們使用Math.max獲取最大值并返回,最后我們將得到數組所有項目的最大值。

[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => Math.max(a, i));

當然如果數組每項都是數字我們可以使用...展開運算符和Math.max配合。

Math.max(...[1, 2, 3, 4, 5, 6, 7, 8]);

3. 處理不規則數組

通過mapreduce配合使用,返回每個子數組拼接好的結果。

let data = [
  ["紅色","128g", "蘋果手機"],
  ["南北","兩室一廳","128㎡","洋房住宅"],
  ["小米","白色","智能運動手表","心率血壓血氧","來電信息提醒"], 
  ["官方發售","2020年秋季","籃球","球鞋","品牌直郵"]
]
let dataConcat = data.map(item=>item.reduce((a,i)=>`${a} ${i}`))

// 輸出結果:
["紅色 128g 蘋果手機"
"南北 兩室一廳 128㎡ 洋房住宅"
"小米 白色 智能運動手表 心率血壓血氧 來電信息提醒"
"官方發售 2020年秋季 籃球 球鞋 品牌直郵"]

4. 刪除數據重復項

檢查當前迭代項是否存在,如果不存在添加到數組中。

let array = [1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c'];
array.reduce((noDupes, curVal) => {
  if (noDupes.indexOf(curVal) === -1) { noDupes.push(curVal) }
  return noDupes
}, [])

// 輸出:[1, 2, 3, 'a', 'b', 'c']

5. 驗證括號是否合法

這是一個很巧妙的用法,我在dev.to上看到的用法。如果結果等于0說明,括號數量是合法的。

[..."(())()(()())"].reduce((a,i)=> i === '(' ? a+1 : a-1 , 0);
// 輸出:0

// 使用循環方式
let status=0
for (let i of [..."(())()(()())"]) {
  if(i === "(")
    status = status + 1
  else if(i === ")")
    status = status - 1
  if (status < 0) {
    break;
  }
}

6. 按屬性分組

按照指定key將數據進行分組,這里我用國家字段分組,在每次迭代過程中檢查當前國家是否存在,如果不存在創建一個數組,將數據插入到數組中。并返回數組。

let obj = [
  {name: '張三', job: '數據分析師', country: '中國'},
  {name: '艾斯', job: '科學家', country: '中國'},
  {name: '雷爾', job: '科學家', country: '美國'},
  {name: '鮑勃', job: '軟件工程師', country: '印度'},
]

obj.reduce((group, curP) => {
  let newkey = curP['country']
  if(!group[newkey]){
    group[newkey]=[]
  }
  group[newkey].push(curP)
  return group
}, [])
// 輸出:
[ 中國: [{…}, {…}]
  印度: [{…}]
  美國: [{…}] ]

7. 數組扁平化

這里展示的數組只有一級深度,如果數組是多級可以使用遞歸來進行處理

[[3, 4, 5], [2, 5, 3], [4, 5, 6]].reduce((singleArr, nextArray) => singleArr.concat(nextArray), [])
// 輸出:[3, 4, 5, 2, 5, 3, 4, 5, 6]

當然也可以使用ES6的.flat方法替代

[ [3, 4, 5], 
 [2, 5, 3], 
 [4, 5, 6]
].flat();

8. 反轉字符串

這也是一種很奇妙的實現方法

[..."hello world"].reduce((a,v) => v+a)

或者

[..."hello world"].reverse().join('')

感謝各位的閱讀!關于“JS中reduce怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女