@s24344

Как удалить вложенные массивы по условию?

Из такого массива:

const arr = [
  [{id: 1, value: "item 1"}, {id: 2, value: "item 3"}, {id: 3, value: "item 3"}, {id: 4, value: "item 4"}],
  [{id: 1, value: "item 1"}, {id: 2, value: "item 2"}, {id: 3, value: "-"}, {id: 4, value: "-"}],
  [{id: 1, value: "-"}, {id: 2, value: "-"}, {id: 3, value: "-"}, {id: 4, value: "-"}],
  [{id: 1, value: "item 1"}, {id: 2, value: "item 3"}, {id: 3, value: "item 3"}, {id: 4, value: "-"}],
  [{id: 1, value: "item 1"}, {id: 2, value: "item 3"}, {id: 3, value: "item 3"}, {id: 4, value: "item 10"}],
];

Необходимо получить такой:

const arrM = [
  [{id: 1, value: "item 1"}, {id: 2, value: "item 3"}, {id: 3, value: "item 3"}, {id: 4, value: "item 4"}],
  [{id: 1, value: "item 1"}, {id: 2, value: "item 3"}, {id: 3, value: "item 3"}, {id: 4, value: "item 10"}],
];

Т.е., оставить те элементы, в которых нет value: "-".
  • Вопрос задан
  • 159 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Как будем определять, должен ли элемент массива остаться:

const mustStay = arr => arr.every(n => n.value !== '-');

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

const newArr = arr.filter(mustStay);

Изменяем существующий:

arr.reduceRight((_, n, i, a) => mustStay(n) || a.splice(i, 1), null);

// или

arr.splice(0, arr.length, ...arr.filter(mustStay));

// или

let numDeleted = 0;

for (const [ i, n ] of arr.entries()) {
  arr[i - numDeleted] = n;
  numDeleted += !mustStay(n);
}

arr.length -= numDeleted;
Ответ написан
Комментировать
potapchino
@potapchino
const arrM = arr.filter(subarr => !subarr.some(item => item.value === '-'))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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