问题一:forEach 和 map 之间的区别:
1、forEach 不返回新数组,map 返回新数组,其中包含回调函数的返回值。
2、用途:如果只想要遍历数组并对每个元素执行某些操作而不产生新数组,那么应该使用 forEach,如果想要基于原数组创建一个新数组,每个元素都是原数组元素经过某种变换后的接口,那么应该是用 map。
3、链式调用:由于 map 返回一个新数组,它可以与其他数组方法链式调用,而 forEach 不返回数组,因此不适合链式调用场景。
问题二:怎么在 forEach 函数中返回值,try catch 方式
const numbers = [1, 2, 'three', 4, 5]; // 包含一个非数字的字符串
let errors = []; // 用于收集错误的数组
numbers.forEach(function(number) {
try {
// 尝试将每个元素转换为数字
const num = Number(number);
console.log(num); // 假设这是你要执行的操作
} catch (error) {
// 如果转换失败,捕获错误并添加到错误数组中
errors.push(error);
}
});
// 处理或返回错误数组
console.log(errors); // 输出任何在转换过程中发生的错误
const numbers = [1, 2, 'three', 4, 5];
const processNumber = async number => {
try {
const num = Number(number);
console.log(num); // 假设这是你要执行的异步操作
return num; // 返回处理结果
} catch (error) {
console.error(error); // 处理错误
throw error; // 重新抛出错误以便在 Promise.all 中捕获
}
};
// 使用 Promise.all 处理所有异步操作
Promise.all(numbers.map(processNumber))
.then(results => {
console.log(results); // 输出所有成功处理的结果
})
.catch(errors => {
console.error(errors); // 输出任何在处理过程中发生的错误
});
问题二:map 函数如果不写 return 会返回什么?
// 场景一
const arr = [{name:'测试1'},{name:'测试2'},{name:'测试3'}].map(item=>{item})
console.log('arr::',arr);// [undefined, undefined, undefined]
// 场景二 map 当 filter 使用时
const arr = [{name:'测试1'},{name:'测试2'},{name:'测试3'}].map(item=>item.name=='测试2');
console.log('arr::',arr);// [false,true,false]
简单总结一下问题二的原因: