Фильтровать массив по дате и значению - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь отфильтровать массив, но он возвращается пустым, я пытаюсь заставить его вернуть массив, в котором дата находится за предыдущие 30 минут, а значение превышает 15.

Давайте скажем, что текущее время - 19: 45:

let transactions = [
  { value: "50.00", date: "2020-08-03T11:52:28.876Z" },
  { value: "13.10", date: "2020-08-03T11:57:32.900Z" },
  { value: "12.11", date: "2020-08-03T12:23:06.379Z" },
  { value: "12.89", date: "2020-08-03T14:20:41.720Z" },
  { value: "12.89", date: "2020-08-03T19:30:41.720Z" },
  { value: "22.89", date: "2020-08-03T19:34:41.720Z" },
  { value: "50.00", date: "2020-08-03T19:40:41.720Z" }
];

const THIRTY_MINUTES = 30 * 60 * 1000;

const isLastThirtyMins = transactions
  .map(
    transaction =>
      new Date().getTime() - new Date(transaction.date).getTime() <
      THIRTY_MINUTES
  )
  .filter(transaction => transaction.value >= 15);

console.log(isLastThirtyMins);
// []

Я пытаюсь заставить его вернуть эти 2 элемента:

{ value: "22.89", date: "2020-08-03T19:34:41.720Z" }
{ value: "50.00", date: "2020-08-03T19:40:41.720Z" }

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Использовать фильтр вместо карты

const isLastThirtyMins = transactions
  .filter(transaction => new Date().getTime() - new Date(transaction.date).getTime() < THIRTY_MINUTES)
  .filter(transaction => parseFloat(transaction.value) >= 15);

Или лучше вызвать фильтр только один раз:

const isLastThirtyMins = transactions
  .filter(transaction =>
    (new Date().getTime() - new Date(transaction.date).getTime() < THIRTY_MINUTES) &&
    (parseFloat(transaction.value) >= 15));
0 голосов
/ 03 августа 2020
const isLastThirtyMins = transactions
  .filter(
    transaction =>
      new Date().getTime() - new Date(transaction.date).getTime() <
      THIRTY_MINUTES
  );

Объяснение:

То, что вы делаете, - это сопоставление каждого элемента в вашем массиве с new Date().getTime() - new Date(transaction.date).getTime() < THIRTY_MINUTES, который является boolean. Таким образом, возвращаемое значение map будет чем-то вроде [true, false, false, true ...], а затем вы пытаетесь отфильтровать этот возвращаемый массив по transaction.value, но, как вы можете видеть, transaction теперь является логическим, а не реальной транзакцией и у него нет свойства value.

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