Javascript 按日期和值筛选数组
我试图过滤一个数组,但它返回空的,我试图让它返回一个数组,其中日期在前30分钟,值超过15 假设当前时间是19:45: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: "
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" }