小白学习用的 reduce
用法总结**,分为:
reduce
是干嘛的?
reduce
是数组的“归并器”,用来把一个数组变成一个值(数字、字符串、对象、数组等都可以)。
它一边遍历数组,一边累计结果。
reduce
语法结构array.reduce((acc, cur, index, arr) => {
// acc 是“累计器”,你构建的最终结果
// cur 是当前项
// index 是当前索引(从0开始)
// arr 是原数组(不常用)
return 新的acc // 每轮 return 的 acc 会传到下一轮
}, 初始值)
const nums = [1, 2, 3, 4]
const sum = nums.reduce((acc, cur) => acc + cur, 0)
// 初始 acc = 0 → 0+1 → 1+2 → 3+3 → 6+4 = 10
console.log(sum) // 输出 10
const words = ['我', '是', 'ChatGPT']
const sentence = words.reduce((acc, cur) => acc + cur, '')
console.log(sentence) // 输出:我是ChatGPT
const langs = ['en', 'zh']
const translations = langs.reduce((acc, lang) => {
acc[lang] = `${lang}翻译`
return acc
}, {})
console.log(translations)
// 输出:{ en: 'en翻译', zh: 'zh翻译' }
const users = [
{ name: 'Tom', age: 17 },
{ name: 'Jerry', age: 21 },
{ name: 'Amy', age: 17 }
]
const groupByAge = users.reduce((acc, user) => {
const age = user.age
if (!acc[age]) acc[age] = []
acc[age].push(user.name)
return acc
}, {})
console.log(groupByAge)
// 输出:{ 17: ['Tom', 'Amy'], 21: ['Jerry'] }
“一边循环,一边累,加到最后才返回。”
reduce
就像你自己写的 let result = 初始值; for 循环里面 result 不断变
acc
就是整个 reduce
的结果array.reduce((accumulator, currentItem, index, array) => {
// 每一轮对 acc 做处理
return 新的acc
}, 初始值)
[1,2,3].reduce((a,b)=>a+b, 0)
['en','zh'].reduce((acc,lang)=>{acc[lang]=xx; return acc}, {})