Я знаю, что он работает с Set
, но у меня сложилось впечатление, что он будет работать и с массивом. Поэтому я попробовал это в Chrome и был удивлен, что это не сработало:
const array = [1,2,3,4,5,6]
for (const item of array) {
if (item === 3 || item === 4) {
array.splice(array.indexOf(item), 1);
}
}
console.log(array) // [1,2,4,5,6]
Он не удалил 4
.
Так что мой вопрос в том, должна ли безопасность итераций работать только с Set
и Map
, но не с Array
?
(Если это так, то, кроме простого синтаксиса, я не вижу преимущества использования его по сравнению с for(;;)
. У меня сложилось впечатление, что for..of
собирается предотвратить ошибки, даже с Array
, как это происходит с Set
и Map
)
Обратите внимание, что в качестве трюка я могу сделать это путем клонирования массива (или обратной итерации):
const array = [1,2,3,4,5,6]
for (const item of Array.from(array)) {
if (item === 3 || item === 4) {
array.splice(array.indexOf(item), 1);
}
}
console.log(array) // [1,2,5,6]