Коротко и понятно — использовать современный API массивов. Самый читаемый вариант:
Простой и понятный (читабельность — преимущество):
```
const result = items
.filter(item => !item.delete) // или item => !item.deleted
.map(({ id, name }) => ({ id, name }));
```
Если важно пройтись по массиву только один раз (экономия на двух проходах):
```
const result = items.reduce((acc, { delete: del, id, name }) => {
if (!del) acc.push({ id, name });
return acc;
}, []);
```
Альтернатива через flatMap (коротко и функционально):
```
const result = items.flatMap(({ delete: del, id, name }) => del ? [] : [{ id, name }]);
```
Рекомендации:
- Лучше назвать флаг `deleted` вместо `delete` — так яснее и нет конфликтов с ключевым словом.
- Если `items` может быть undefined/null, безопаснее `(items || []).filter(...)` или `Array.isArray(items) ? ... : []`.
- Для простоты и поддержки выбирайте первый вариант (filter + map); reduce — когда важна производительность.