@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: "-".
  • Вопрос задан
  • 147 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Собрать новый массив:

const newArr = arr.filter(n => n.every(m => m.value !== '-'));

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

arr.reduceRight((_, n, i, a) => n.some(m => m.value === '-') && a.splice(i, 1), null);

// или

arr.splice(0, arr.length, ...arr.filter(n => n.every(m => m.value !== '-')));

// или

let numDeleted = 0;

for (let i = 0; i < arr.length; i++) {
  arr[i - numDeleted] = arr[i];
  numDeleted += arr[i].some(n => n.value === '-');
}

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

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

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект