reduce()方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值,简单来说就是对一个 array 执行 reduce()方法,就是把其中的 function()挨个地作用于 array 中的元素上,而且上一次的输出会作为下一次的一个输入
array.reduce(function(accumulator, currentValue, currentIndex, arr), initialValue);
/*
accumulator: 必需。累计器
currentValue: 必需。当前元素
currentIndex: 可选。当前元素的索引;
arr: 可选。要处理的数组
initialValue: 可选。传递给函数的初始值,相当于accumulator的初始值
*/
let arr = [1, 2, 3, 4, 5]
arr.reduce((sum, curr) => sum + curr, 0) // 得到15
let arr = [1, 2, 3, 4]
let max = arr.reduce((pre, cur, index, arr) => {
return pre > cur ? pre : cur
}) // 得到 4
let str = 'abcdaabc';
str.split('').reduce((res, cur) => {
res[cur] ? res[cur] ++ : res[cur] = 1 // 如果cur第一次出现,记为1
return res; // 否则记录数+1
}, {})
let arr = [1, 2, 3, 4, 4, 1]
let newArr = arr.reduce((pre, cur) => {
if (!pre.includes(cur)) {
return pre.concat(cur)
} else {
return pre
}
}, [])
console.log(newArr) //[1, 2, 3, 4]
let arr = [[0, 1],[2, 3],[4, 5]] // 二维数组
let newArr = arr.reduce((pre, cur) => {
return pre.concat(cur) // 合并pre 与 cur, 并返回一个新数组
}, [])
console.log(newArr) // 一维数组 [0, 1, 2, 3, 4, 5]
//or
newArr = arr.flat()
console.log(newArr) // 一维数组 [0, 1, 2, 3, 4, 5]
let obj = [
{ name: '张三', job: '数据分析师', country: '中国' },
{ name: '艾斯', job: '科学家', country: '中国' },
{ name: '雷尔', job: '科学家', country: '美国' },
{ name: '鲍勃', job: '软件工程师', country: '印度' },
]
cosnt newObj = obj.reduce((pre, cur) => {
let newkey = cur['country']
if (!pre[newkey]) {
pre[newkey] = []
}
pre[newkey].push(cur)
return pre
} [])
console.log(newObj) // [中国: [{…}, {…}],印度: [{…}],美国: [{…}]]
const str = [...'hello world'].reduce((a, v) => v + a)
console.log(str) //dlorw olleh
//or
const str = [..."hello world"].reverse().join('')
console.log(str) dlorw olleh
let data = [
['红色', '128g', '苹果手机'],
['南北', '两室一厅', '128㎡', '洋房住宅'],
['小米', '白色', '智能运动手表', '心率血压血氧', '来电信息提醒'],
['官方发售', '2020年秋季', '篮球', '球鞋', '品牌直邮'],
]
let dataConcat = data.map((item) => item.reduce((a, i) => `${a} ${i}`))
console.log(dataConcat) // ["红色128g苹果手机","南北两室一厅128㎡ 洋房住宅","小米白色智能运动手表 心率血压血氧 电信息提醒","官方发售2020年秋季篮球球鞋品牌直邮"]