Как лучше всего удалить элементы во время выполнения foreach в javascript?

let aUsers=[{"name":"goku"},{"name":"cell"},{"name":"vegeta"},{"name":"freezer"}]

aUsers.forEach((user,i)=>{
  if (user.name= = "cell" || user.name= = "freezer"){
    aUsers.splice(i,1); //this causes a problem..
  }
})

console.info(aUsers);

Я знаю, что должен использовать filter, но я не знаю, как заставить мои элементы быть removed из array в то же время, когда мой foreach работает.

Я бы знал, как решить эту проблему, но после запуска foreach, возможно, есть лучший способ сделать это.

как мне это сделать?

Поскольку filter возвращает новый массив, вы можете назначить aUsers функции фильтра. aUsers = aUsers.filter( /.../ );.

Rickard Elimää 22.12.2020 05:34

Как ни странно, ваш пример работает - по счастливой случайности. Возможно, вы можете изменить пример, чтобы удалить два соседних элемента, например, попробуйте проверить if (user.name= = "cell" || user.name= = "vegeta"), тогда вы действительно проиллюстрируете проблему.

Wyck 22.12.2020 05:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, вы должны использовать filter вместо forEach:

let aUsers=[{"name":"goku"},{"name":"cell"},{"name":"vegeta"},{"name":"freezer"}]

const newUsers = aUsers.filter(user => user.name !== "cell" && user.name !== "freezer");

console.info(newUsers);

Если вы должны изменить массив на месте, выполните итерацию в обратном направлении:

let aUsers=[{"name":"goku"},{"name":"cell"},{"name":"vegeta"},{"name":"freezer"}]

for (let i = aUsers.length - 1; i >= 0; i--) {
  if (['cell', 'freezer'].includes(aUsers[i].name)) {
    aUsers.splice(i, 1);
  }
}

console.info(aUsers);

просто любопытно :) могу я узнать, зачем повторять в обратном порядке?

KcH 22.12.2020 05:34

Если вы этого не сделаете, вы будете изменять массив во время его повторения. Объединение элемента 1 при повторении элемента 1 означает, что следующий индекс равен 2 — то, что раньше было в 2, теперь равно 1, поэтому он не повторяется.

CertainPerformance 22.12.2020 05:37

ааа имеет смысл ... спасибо :)

KcH 22.12.2020 05:38

Другие вопросы по теме