Javascript 按日期和值筛选数组

Javascript 按日期和值筛选数组,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图过滤一个数组,但它返回空的,我试图让它返回一个数组,其中日期在前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: "

我试图过滤一个数组,但它返回空的,我试图让它返回一个数组,其中日期在前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);
// []
const isLastThirtyMins=事务
.过滤器(
事务=>
new Date().getTime()-新日期(transaction.Date).getTime()<
三十分钟
);
解释:


您所做的是将数组中的每个元素映射到
new Date().getTime()-new Date(transaction.Date).getTime()
,这是一个
布尔值。因此,
map
的返回值类似于
[true,false,false,true…]
,然后您试图通过
transaction.value
过滤此返回数组,但是正如您所看到的,
事务
现在是一个布尔值,不是真正的事务,它没有
属性。

使用过滤器而不是映射

const isLastThirtyMins=事务
.filter(transaction=>new Date().getTime()-新日期(transaction.Date).getTime()<三十分钟)
.filter(transaction=>parseFloat(transaction.value)>=15);
或者更好,只调用筛选器一次:

const isLastThirtyMins=事务
.filter(事务=>
(new Date().getTime()-新日期(transaction.Date).getTime()<三十分钟)&&
(parseFloat(transaction.value)>=15);

调用
.map()
将创建一个布尔值数组。您根本不需要
.map()
,您需要在
.filter()
回调中进行这两个比较。为什么该值是字符串?如果它是一个
数字
{ value: "22.89", date: "2020-08-03T19:34:41.720Z" }
{ value: "50.00", date: "2020-08-03T19:40:41.720Z" }