学习一下Array.reduce函数的使用

今天面试遇到一个问题,如下:

实现一个函数,把 [{ name: "Alice", age: 10 }, { name: "Bob", age: 20 }] 转换成 { Alice: 10, Bob: 20 }

然后我用for循环加Object.values的方法实现了,面试这时候问,能不能用reduce实现?答,当然是可以的,可惜我对reduce使用的并不熟练,现在来学习一下。

 

下面是MDN给出的定义:

reduce方法对数组中的每个元素按按顺序执行一个提供的reducer函数,每一次运行reducer函数会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个元素返回。

它的第一个参数是一个函数,第二个参数是初始值。如果不传入第二个参数,那么数组索引为0的元素将被作为初始值,迭代器将从第二个元素开始执行。

reducer可以理解为“归约”:在计算机科学和编程中,特别是在函数式编程里,reducer 是一种特定类型的函数,它用于将集合中的元素通过某种操作累积起来得到一个单一的结果。这个过程通常称为“归约”(reduce)

 

 下面是面试题的答案

function transformArrayToObject(arr) {
  return arr.reduce((accumulator, currentValue) => {
    // 使用当前元素的name作为键,age作为值添加到累加器对象中
    accumulator[currentValue.name] = currentValue.age;
    return accumulator;
  }, {});  // 初始值为一个空对象
}

// 测试数据
const array = [
  { name: "Alice", age: 10 },
  { name: "Bob", age: 20 }
];

// 调用函数并打印结果
const result = transformArrayToObject(array);
console.log(result);  // 输出: { Alice: 10, Bob: 20 }

 

使用场景1:数组求和

const array1 = [1, 2, 3, 4];

// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  initialValue,
);

console.log(sumWithInitial);
// Expected output: 10

 

 使用场景2:展开嵌套数组

const flattened = [[1, 2], [3, 4], [5, 6]].reduce((accumulator, currentValue) => accumulator.concat(currentValue), [])

 

 

 

 

posted @ 2024-09-28 23:02  飞向火星  阅读(11)  评论(0编辑  收藏  举报