数组的reduce
数组reduce的格式含义
js
/**
* 格式一:
* arr.reduce(function(prev, cur, index, arr){
* ...
* })
*
* 格式二:
* arr.reduce(function(prev, cur, index, arr){
* ...
* }, init)
*
* 其中,各参数的含义是;
* arr: 表示原数组
* prev: 表示上一次调用回调时的返回值,或者初始值 init;
* index: 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
* init: 表示初始值。
*/
常见的用法
js
// 数组的reduce
let arr = [1, 2, 3, 4]
// 求和
let sum = arr.reduce((prev, cur) => prev + cur)
console.log('求和为:', sum)
// 求积
let mul = arr.reduce((prev, cur) => prev * cur)
console.log('求积为:', mul)
let arr2 = [1, 1, 2, 2, 3, 5, 4, 4, 5, 5, 6]
// 计算每个元素出现的次数
let itemTimes = arr2.reduce((prev, cur) => {
// 注意:对象用in来判断是否存在
if (cur in prev) {
prev[cur]++
} else {
prev[cur] = 1
}
return prev
}, {})
console.log('计算每个元素出现的次数:', itemTimes)
// 数组去重
let newArr = arr2.reduce((prev, cur) => {
if (prev.includes(cur)){
return prev
} else {
return prev.concat(cur)
}
}, [])
console.log('数组去重: ', newArr)
// 将多维数组转为一维数组
let arr3 = [1, 2, 3, [4, 5], [6, 7], [8, 9, [10]]]
let flatArr = function(arr) {
return arr.reduce((prev, cur) => {
return prev.concat(Array.isArray(cur) ? flatArr(cur) : cur)
}, [])
}
console.log('将二维数组转为一维数组: ', flatArr(arr3))