Задать вопрос
@jizzy

Как отфильтровать массив в массиве?

Есть массив:

const array = [
        {
            "id": "1",
            "name": "test",
            "array2": [
                null,
                "666",
                "99999"
            ]
        },
        {
            "id": "1",
            "name": "test",
            "array2": [
               null,
                null,
                "2222",
                "5555"
            ]
        }
]

Нужно избавиться от null во вложенных массивах.
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Как будем определять, должен ли элемент остаться: const mustStay = n => n !== null;.

Собираем новый массив:

const newArr = arr.map(n => ({
  ...n,
  array2: n.array2.filter(mustStay),
}));

Обновляем существующий:

for (let i = 0; i < arr.length; i++) {
  const a = arr[i].array2;
  for (let j = a.length; j--;) {
    if (!mustStay(a[j])) {
      for (let k = j; ++k < a.length; a[k - 1] = a[k]) ;
      a.pop();
    }
  }
}

// или

arr.forEach(n => {
  n.array2.reduceRight((_, n, i, a) => mustStay(n) || a.splice(i, 1), 0);
});

// или

(function next(i, { array2: a } = arr[i] ?? {}) {
  if (a) {
    a.splice(0, a.length, ...a.filter(mustStay));
    next(-~i);
  }
})(0);

// или

for (const { array2: a } of arr) {
  a.length -= a.reduce((acc, n, i) => (
    a[i - acc] = n,
    acc + !mustStay(n)
  ), 0);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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