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

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

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

Похожие вопросы