关于最后一个参数 – 初始值:
计算特定初始值的累计结果
例如,计算数组中所有元素的乘积,并且希望从特定的初始值(比如 1)开始计算,而不是从数组的第一个元素开始。如果不设置初始值,第一个元素将作为初始累计值,可能不符合预期的计算逻辑。1
2
3const arr = [2, 3, 4];
const productWithInitialValue = arr.reduce((acc, curr) => acc * curr, 1);
console.log(productWithInitialValue); // 24处理空数组
如果不确定数组是否为空,设置初始值可以确保在空数组的情况下也能返回一个合理的值,而不是 undefined。
例如,计算数组中所有数字的和,如果数组为空,希望返回 0。1
2
3const arr = [];
const sumWithInitialValue = arr.reduce((acc, curr) => acc + curr, 0);
console.log(sumWithInitialValue); // 0处理非数值类型的初始状态
如果要进行的累计操作不是简单的数值计算,而是涉及到更复杂的数据结构或状态,通常需要设置一个合适的初始值。
例如,将数组中的对象合并为一个新的对象,可以设置一个空对象作为初始值。**1
2
3const arr = [{ name: 'Alice' }, { name: 'Bob' }];
const mergedObject = arr.reduce((acc, curr) => ({...acc,...curr }), {});
console.log(mergedObject); // { name: 'Bob' }处理可能存在单个元素的数组
当数组可能只有一个元素时,设置初始值可以确保处理逻辑的一致性。
例如,对数组中的元素进行特定的转换操作,如果只有一个元素,也希望按照统一的逻辑进行处理。1
2
3const arr = [5];
const transformedValue = arr.reduce((acc, curr) => acc + curr, 0);
console.log(transformedValue); // 5