javascript - 如何在javascript中的给定数据范围内每天每小时过滤一个数据对象
问题描述
这是 json 对象的片段,我试图从 1/1 到 3/31 每小时获取一个 json 对象。假设有一些 JSON 对象有时间 01/01/2020 12:00 ,01/01/2020 13:00 等等。我只想每天获取这些 json 对象。所以每天应该有 24 个 json 对象。我知道如何根据一个静态条件过滤元素数组,但我不知道当条件是动态时如何做。
[
{
"id": 2617820,
"time": "01/01/2020 12:16",
"stationId": "150000",
"RoadStatus": "Ice",
"surfaceRoadTemperature": "30.9F",
},
{
"id": 2617819,
"time": "01/01/2020 12:26",
"stationId": "150000",
"RoadStatus": "Ice",
"surfaceRoadTemperature": "30.7F",
},
{
"id": 2617818,
"time": "01/01/2020 12:30",
"stationId": "150000",
"RoadStatus": "Ice",
"surfaceRoadTemperature": "30.9F",
},
{
"id": 2617817,
"time": "01/01/2020 12:36",
"stationId": "150000",
"RoadStatus": "Ice",
"surfaceRoadTemperature": "30.7F",
}
]
解决方案
你提到了 Array.filter() 所以我假设你可能想要一个函数式的答案。您是否尝试过 Array.reduce()。
arr.reduce(callback( accumulator, currentValue[, index[, array]] )[, initialValue])
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
在您的情况下,回调类似于
function addHourif(acc, cv){
const prevtime = new Date(acc.slice(-1)[0].time).getTime()
const cvtime = new Date(cv.time).getTime()
if (cvtime >= prevtime + 60*60*1000 ) return [...acc , cv]
else return acc
}
console.log(a.reduce(addHourif, [a[0]]))
如果我更改了时间,这对您的数据有效,这只是检查自上次输入以来是否已经过去了一个小时,您可以使用 Date 方法来优化该过程,以便您获得最接近一个小时或每天 24 个等。 ..
推荐阅读
- typescript - 在不同的分支中约束并集 T
- ssms - Microsoft 是否删除了 SQL Server Management Studio 中结果视图的缩放
- scala - 如何从对象扩展的抽象类中获取类型参数
- c# - 将图像加载到 xaml
- angular - 您如何在您的 Angular2+ 项目中构建 http 调用?
- google-maps - React Google Map : 绑定在 GoogleMap 中的所有标记的 UL 以及单击每个 li 时对应的信息窗口
- kotlin - Kotlin:列表中的某个值只出现一次
- ruby-on-rails - 如何仅显示图像轨道数组中的第一张图像
- react-native - Ios 应用程序没有在模拟器上运行,甚至没有生成构建
- python - 列表理解守卫被忽略