Просто нужно лучше понять использование новых циклов for в ES5 / ES6. Я где-то читал о приведенном выше коде для изменения массива объектов items.
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))
Мой вопрос в том, что эквивалент цикла for of приведенному выше выражению forEach?
for(let [index, value] of items.entries()) {
return value.selected = set.has(value.id)
}
Нет необходимости использовать .entries(), если вам не нужен индекс. Вобще for (const value of items) …





То, что вы опубликовали, очень близко - единственная проблема, которую я вижу, заключается в том, что вы пытаетесь выполнить return, который преждевременно завершит работу всей функции (и, следовательно, цикла). Это связано с тем, что цикл не вызывает никаких новых функций на каждой итерации, поэтому return оставляет функцию, в которой for начинает повторение. Если вы удалите return из своей первоначальной попытки, он будет работать правильно и, как ожидалось.
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))
for(let [index, value] of items.entries()) {
value.selected = set.has(value.id)
}
console.info(items);
Зачем вставлять сюда этот
return? Обратите внимание, что вforEachвозвращаемое значение обратного вызова все равно игнорируется.