Как можно упростить и улучшить процесс получения данных?

Как можно более чётко и компактно записать следующий фрагмент кода, который фильтрует элементы без флага delete и преобразует их в объекты { id, name }?
  • 14 мая 2026 г. 10:01
Ответы на вопрос 3
Коротко и понятно — использовать современный 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 — когда важна производительность.
ещё вариант — <code>flatMap</code> одним проходом: <br/> <pre><code>this.list = res.list.flatMap(({ delete: del, id, name }: ItemDto) =&gt; del ? [] : [{ id, name }]);</code></pre>
<pre><code class="javascript">this.list = res.list
  .filter(({ delete: isDeleted }) =&gt; !isDeleted)
  .map(({ id, name }) =&gt; ({ id, name }));</code></pre>
Похожие вопросы