JavaScript reduce 方法

关于最后一个参数 – 初始值:

  1. 计算特定初始值的累计结果
    例如,计算数组中所有元素的乘积,并且希望从特定的初始值(比如 1)开始计算,而不是从数组的第一个元素开始。如果不设置初始值,第一个元素将作为初始累计值,可能不符合预期的计算逻辑。

    1
    2
    3
    const arr = [2, 3, 4];
    const productWithInitialValue = arr.reduce((acc, curr) => acc * curr, 1);
    console.log(productWithInitialValue); // 24
  2. 处理空数组
    如果不确定数组是否为空,设置初始值可以确保在空数组的情况下也能返回一个合理的值,而不是 undefined。
    例如,计算数组中所有数字的和,如果数组为空,希望返回 0。

    1
    2
    3
    const arr = [];
    const sumWithInitialValue = arr.reduce((acc, curr) => acc + curr, 0);
    console.log(sumWithInitialValue); // 0
  3. 处理非数值类型的初始状态
    如果要进行的累计操作不是简单的数值计算,而是涉及到更复杂的数据结构或状态,通常需要设置一个合适的初始值。
    例如,将数组中的对象合并为一个新的对象,可以设置一个空对象作为初始值。**

    1
    2
    3
    const arr = [{ name: 'Alice' }, { name: 'Bob' }];
    const mergedObject = arr.reduce((acc, curr) => ({...acc,...curr }), {});
    console.log(mergedObject); // { name: 'Bob' }
  4. 处理可能存在单个元素的数组
    当数组可能只有一个元素时,设置初始值可以确保处理逻辑的一致性。
    例如,对数组中的元素进行特定的转换操作,如果只有一个元素,也希望按照统一的逻辑进行处理。

    1
    2
    3
    const arr = [5];
    const transformedValue = arr.reduce((acc, curr) => acc + curr, 0);
    console.log(transformedValue); // 5