@AE42

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

Добрый вечер!

Есть массив
let places = [{place: 1, other keys...}, {place: 3}, {place: 7}, n+1]

и
let items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, n+1]

Сначала делал через splice
items.splice(places.place - 1, 1)
Но в итоге понял, что оно удаляет с каждым разом n+1 элемент, каждый ход в цикле

Что я хочу сделать?
Мне надо удалить все элементы places.place из массива items

В итоге должен получится следующий массив:
[2, 4, 5, 6, 8, 9, 10, n+1]

Как можно это сделать, чтобы затраты на время и памят были минимальными, так как массивы будут иметь большой размер
  • Вопрос задан
  • 195 просмотров
Пригласить эксперта
Ответы на вопрос 3
const places = [{place: 1, other: "key"}, {place: 3}, {place: 7}]
const placesMaped = places.map(place => place.place)
const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const itemsFiltered = items.filter(item => !placesMaped.includes(item))
console.log({placesMaped, itemsFiltered})
Ответ написан
Aetae
@Aetae
Тлен
Если значения - объекты делай тупо filter, всё равно они по ссылкам храняться, не должно особо влиять на память. Ток потом оригинал массива занули и всё.
Ответ написан
hzzzzl
@hzzzzl
let places = [{place: 1,}, {place: 3}, {place: 7},]
let items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// Set.has будет эффективнее чем Array.includes
// вдобавок останутся только уникальные плейсесы
const _places = new Set()
for (const pl of places) { _places.add(pl.place) }
items.filter(i => !_places.has(i))
Ответ написан
Ваш ответ на вопрос

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

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