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
相关产品推荐
相关产品推荐

