1. reduce
-
最佳实践应用:
- 累积计算:如数组求和、求积、找最大值等。
- 数据转换:如将数组转换为对象、扁平化嵌套数组等。
- 状态管理:在复杂数据处理中维护中间状态。
-
代码示例:
javascript // 数组求和 const numbers = [1, 2, 3, 4]; const sum = numbers.reduce((acc, curr) => acc + curr, 0); console.log(sum); // 输出: 10 // 数组转对象 const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; const userMap = users.reduce((acc, user) => { acc[user.id] = user.name; return acc; }, {}); console.log(userMap); // 输出: { 1: 'Alice', 2: 'Bob' } -
原理讲解:
reduce接受一个回调函数和一个初始值(可选)。回调函数依次处理数组的每个元素,将前一次回调的返回值作为累加器(acc),当前元素作为当前值(curr),最终返回累加器的最终值。- 完全控制迭代过程,可返回任意类型(如数组、对象、数字等)。
2. map
-
最佳实践应用:
- 元素转换:对数组中的每个元素进行相同操作,返回新数组。
-
代码示例:
javascript // 数组元素乘以2 const numbers = [1, 2, 3]; const doubled = numbers.map(num => num * 2); console.log(doubled); // 输出: [2, 4, 6] // 对象数组属性提取 const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; const names = users.map(user => user.name); console.log(names); // 输出: ['Alice', 'Bob'] -
原理讲解:
map接受一个回调函数,对数组的每个元素执行该函数,并返回一个新数组,新数组的每个元素是回调函数的返回值。- 必须返回新元素,保持数组长度不变。
3. filter
-
最佳实践应用:
- 条件筛选:根据条件筛选出符合要求的元素,返回新数组。
-
代码示例:
javascript // 筛选偶数 const numbers = [1, 2, 3, 4]; const evens = numbers.filter(num => num % 2 === 0); console.log(evens); // 输出: [2, 4] // 筛选对象数组 const users = [{ id: 1, age: 25 }, { id: 2, age: 30 }]; const adults = users.filter(user => user.age >= 26); console.log(adults); // 输出: [{ id: 2, age: 30 }] -
原理讲解:
filter接受一个回调函数,对数组的每个元素执行该函数,若回调返回true,则保留该元素,否则丢弃。最终返回一个新数组,包含所有通过测试的元素。- 返回符合条件的元素子集。
4. forEach
-
最佳实践应用:
- 副作用操作:对数组元素执行操作,但不关心返回值(如打印元素、修改对象属性等)。
-
代码示例:
javascript // 打印数组元素 const numbers = [1, 2, 3]; numbers.forEach(num => console.log(num)); // 输出: 1 2 3 // 修改对象数组属性 const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; users.forEach(user => { user.name = user.name.toUpperCase(); }); console.log(users); // 输出: [{ id: 1, name: 'ALICE' }, { id: 2, name: 'BOB' }] -
原理讲解:
forEach接受一个回调函数,对数组的每个元素执行该函数,无返回值(undefined)。- 不可中断(无法通过
break或return终止)。
5. some
-
最佳实践应用:
- 存在性判断:检查数组中是否至少有一个元素满足条件,返回布尔值。
-
代码示例:
javascript // 检查是否存在偶数 const numbers = [1, 3, 5]; const hasEven = numbers.some(num => num % 2 === 0); console.log(hasEven); // 输出: false // 检查对象数组属性 const users = [{ id: 1, isAdmin: false }, { id: 2, isAdmin: true }]; const hasAdmin = users.some(user => user.isAdmin); console.log(hasAdmin); // 输出: true -
原理讲解:
some接受一个回调函数,对数组的每个元素执行该函数,若回调返回true,则立即返回true并终止遍历;否则遍历完所有元素后返回false。- 短路机制,找到即终止。
总结
- reduce:适用于需要累积计算或复杂数据转换的场景。
- map:适用于对数组元素进行一对一转换的场景。
- filter:适用于根据条件筛选数组元素的场景。
- forEach:适用于对数组元素执行副作用操作的场景。
- some:适用于快速判断数组中是否存在满足条件的元素的场景。
通过合理选择这些方法,可以编写出更简洁、高效、可维护的 JavaScript 代码。