Как использовать фильтр вместо forEach (Javascript) - PullRequest
0 голосов
/ 17 июня 2020

У меня есть функция, указанная ниже. я использую forEach. как я могу использовать фильтр вместо использования forEach в моей функции. Я искал в Интернете, но не нашел способа добиться этого.

pendingPaymentsUtils.getPendingPayment = paymentId => {
  const payments = pendingPaymentsUtils.getPendingPayments()
  let payment = {}

  payments.forEach(function(_payment) {
    if (_payment.id === paymentId) {
      payment = _payment
      return false
    }
  })

  return payment
}

Я пробовал следующий способ, но он не работает должным образом.

pendingPaymentsUtils.getPendingPayment = paymentId => {
  const payments = pendingPaymentsUtils.getPendingPayments()
  let payment = {}

  payments.filter(function(_payment) {
      payment = _payment
      return _payment.id === paymentId ? false: true
  })

  return payment
}

1 Ответ

2 голосов
/ 17 июня 2020
  1. filter возвращает массив результатов, поэтому просто верните его и избавьтесь от переменной payment.
  2. _payment.id === paymentId ? false: true можно было бы сократить до return _payment.id === paymentId;
  3. Используйте неявный возврат стрелочных функций, чтобы еще больше сократить его.
  4. Судя по всему, вам нужно find вместо filter.

Примерно так:

pendingPaymentsUtils.getPendingPayment = paymentId => {
  const payments = pendingPaymentsUtils.getPendingPayments();
  return payments.find(payment => payment.id === paymentId);
}

Еще короче, если избавиться от избыточной переменной payments :

pendingPaymentsUtils.getPendingPayment = paymentId =>
  pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId);

Изменить:

Чтобы вернуть пустой объект вместо undefined, если объект не найден:

pendingPaymentsUtils.getPendingPayment = paymentId =>
  pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId) || {};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...