问题一: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] 
简单总结一下问题二的原因:




