You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ES5/ES6中forEach语句的for of循环等价写法咨询

ES5/ES6循环:forEach转for...of等价写法

嘿,我来帮你把那段forEach代码转换成等价的for...of写法,顺便理清楚两者的逻辑对应关系~

先回顾一下你的原始代码:

var selected = [1, 2, 4, 6], items = [ 
  { id: 1, selected: false }, 
  { id: 2, selected: false }, 
  { id: 3, selected: false }, 
  { id: 4, selected: false }, 
  { id: 5, selected: true }, 
  { id: 6, selected: false } 
];
set = new Set(selected);
items.forEach(a => a.selected = set.has(a.id));

forEach本质是遍历数组的每一个元素,并对每个元素执行回调函数里的逻辑。而for...of是ES6引入的迭代器语法,它可以直接遍历可迭代对象(比如数组)的每一项,所以我们只需要把遍历方式换成for...of,然后把回调里的逻辑放到循环体里就行,逻辑完全一致。

等价的for...of写法如下:

// 建议用const/let代替var,更符合ES6规范
const selected = [1, 2, 4, 6];
const items = [ 
  { id: 1, selected: false }, 
  { id: 2, selected: false }, 
  { id: 3, selected: false }, 
  { id: 4, selected: false }, 
  { id: 5, selected: true }, 
  { id: 6, selected: false } 
];
const set = new Set(selected);

// for...of等价实现
for (const a of items) {
  a.selected = set.has(a.id);
}

这里用const声明a是因为我们只是修改a的属性,不需要重新赋值a本身,这样更严谨。这段代码和原forEach版本的运行结果完全相同:最终items数组里,id在selected中的元素selected属性会被设为true,其余的会被设为false。

内容的提问来源于stack exchange,提问作者Kay Singian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:12:44