@reinmaker1990

Как удалить элементы массива в цикле?

Есть массив:
tasks: [
                {
                    title: 'Make todo list',
                    completed: true
                },
                {
                    title: 'Go skydiving',
                    completed: false
                }
            ],

есть кнопка clear completed, которая вызывает функцию
clearCompleted() {
				
				this.tasks.forEach((item,index)=>{
					if(item.completed){
						this.tasks.splice(index,1)
					}
				})
            }

Вроде бы при этом условии на каждой итерации интерпретатор должен проверить блок if и если true удалить текущий элемент по индексу из массива, но почему-то он то один, то два объекта с свойство completed:true оставляет на доске и только при повторном клике удаляет их. Где ошибка?
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
@dGololobov
начинающий
Можно сделать вот так. Такой метод целиком заменит весь массив, оставив в нем только элементы со свойством completed !== true
clearCompleted() {
    this.tasks = this.tasks.filter(t => !t.completed)
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Che603000
c 2011 javascript
о почему-то он то один, то два объекта с свойство completed:true оставляет на доске и только при повторном клике удаляет их. Где ошибка?

Вы удаляете элементы массива который перебираете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы