reduce 常用方法
介绍
reduce()是数组的一个高阶方法,它用于将数组的每个元素按照指定的规则进行累积计算,最终返回一个单一的结果。reduce()方法接受一个回调函数作为参数,并可选地接受一个初始值。
回调函数 接受四个参数:
累积器 (accumulator):累积计算的结果,也称为累加值。
当前值 (currentValue):当前正在处理的数组元素。
当前索引 (currentIndex):当前正在处理的数组元素的索引。
原始数组 (array):调用reduce()方法的数组。
如果 initialValue 在调用 reduce() 时被提供,那么第一个 preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;如果initialValue 未被提供,那么preValue 等于数组中的第一个值.
一、去重
1.1 普通数组去重(用set更简单)
var arr = [1,2,3,3,2,1,4]
arr.reduce((acc, cur) => {
if (!(acc.includes(cur))) {
acc.push(cur)
}
return acc
}, [])
// [1, 2, 3, 4]
1.2 对象数组去重
// 原始对象数组
const originalArray = [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Apple' },
{ id: 4, name: 'Orange' },
{ id: 5, name: 'Banana' }
];
// 根据name字段进行去重
const uniqueArray = originalArray.reduce((acc, curr) => {
// 通过Set对象来判断是否已经存在相同name的对象
const isExist = acc.some(obj => obj.name === curr.name);
// 如果不存在相同name的对象,则将当前对象添加到结果数组中
if (!isExist) {
acc.push(curr);
}
return acc;
}, []);
console.log(uniqueArray);
// 输出结果
[
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 4, name: 'Orange' }
]
1.3 对象数组去重并合并
// 对name值相同的对象进行合并
const aass = [
{ name: '氯化钠', num: 20 },
{ name: '钙化片', num: 18 },
{ name: '阿莫西林', num: 12 },
{ name: '阿莫西林', num: 30 },
{ name: '氯化钠', num: 23 }
];
const mergedArray = aass.reduce((acc, curr) => {
const existingObj = acc.find(obj => obj.name === curr.name);
if (existingObj) {
existingObj.num += curr.num;
} else {
acc.push(curr);
}
return acc;
}, []);
console.log(mergedArray);
// 输出结果
[
{ name: '氯化钠', num: 43 },
{ name: '钙化片', num: 18 },
{ name: '阿莫西林', num: 42 }
]
最后: