Мой фильтр возвращает весь объект, а не только свойство - PullRequest
0 голосов
/ 22 февраля 2020

Я хочу вернуть массив идентификаторов, но весь объект возвращается. У меня правильный синтаксис?

const docIds = this.claim.claimDocuments.filter(doc => {
  if (doc.status !== 'Submitted') {
    return doc.id;
  }
});

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

filter не меняет массив, он просто выбирает записи, которые проходят логический тест. Затем вам нужно map вывод filter, чтобы вернуть только значения id:

const docIds = this.claim.claimDocuments
   .filter(doc => doc.status !== 'Submitted')
   .map(doc => doc.id);
1 голос
/ 22 февраля 2020

Если вы хотите создать массив из части элементов в другом, а также преобразовать каждый передаваемый элемент во что-то другое, вам придется использовать другой метод, возможно, путем инициализации массива, а затем нажатия внутри if во время итерации:

const docIds = [];
for (const doc of this.claim.claimDocuments) {
  if (doc.status !== 'Submitted') {
    docIds.push(doc.id);
  }
}

Или с .reduce:

const docIds = this.claim.claimDocuments.reduce((a, doc) => {
  if (doc.status !== 'Submitted') {
    a.push(doc.id);
  }
  return a;
}, []);

Или с .filter, за которым следует .map, хотя для этого требуется повторение по некоторым элементам дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...