JavaScript 数组遍历方法有多种,常用的主要包括:forEach、map、for...of、for循环、filter、reduce、some、every等。其中forEach和map表面看都是“对每个元素执行操作”,但核心区别在于:前者不产生新数组,仅用于副作用;后者必须返回新数组,且长度与原数组一致。
forEach 是纯执行,不返回有意义的值forEach的设计目的就是“遍历并做事”,比如打印、修改外部变量、发送请求、操作 DOM。它内部会执行回调函数,但总是返回 undefined,不能链式调用,也不能用来生成新数据结构。
无法中途跳出(break),想提前终止需抛错或改用 for 循环不改变原数组,但回调中可手动修改原数组元素(不推荐)
示例:
arr.forEach(x => console.log(x * 2))—— 只打印,无返回值map 是转换器,专注生成新数组map的本质是“映射”:把原数组每个元素按规则转换后,严格返回一个等长的新数组。它不关心副作用,只关注返回值;若回调没写 return,新数组对应位置就是 undefined。
返回的是全新数组,原数组完全不受影响天然支持链式调用(比如 map 后接 filter 或 reduce)
示例:
const doubled = arr.map(x => x * 2)—— 得到新数组 [2,4,6]选哪个?看你要“做什么”还是“要什么”
如果目标是触发动作(如收集日志、批量提交、更新 UI),用 forEach;如果目标是产出数据(如格式化列表、提取字段、单位换算),必须用 map。混淆二者会导致逻辑错误:用 forEach 想取新数组会得到 undefined;用 map 做纯副作用则浪费内存且语义不清。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看下载立即学习“Java免费学习笔记(深入)
”;
需要新数组 → 选 map(哪怕只是浅拷贝:arr.map(x => x))
只需执行一次操作 → 选 forEach(更语义清晰,性能略优)
既要处理又要生成 → 先 map 转换,再 forEach 消费;或拆成两步其他遍历方式的定位补充for 循环最灵活(可 break/continue/索引控制),适合复杂逻辑;for...of 语法简洁,支持异步和迭代器;filter、reduce 等则是带特定语义的专用方法——它们和 map 一样返回新值,而 forEach 是唯一明确“只执行不产出”的标准遍历方法。
