Javascript 使用lodash的地图数据
我有这样的数据:Javascript 使用lodash的地图数据,javascript,lodash,Javascript,Lodash,我有这样的数据: const data = { "result":[ { "intersectionId":77, "deviceNumber":300, "timestamp":"2020-10-23T07:25:00.000+0000", "outstationId":null,
const data = {
"result":[
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:00.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:01.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:58.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":3
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:59.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:26:00.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:26:01.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
}
]
};
{
"2020-10-23T07:25:00.000Z":{
"2": { avgSpeed: 0, avgVehicleLength: 0, avgGap: 0, avgOccupancy: 0, numVehicles: 3},
"3": { avgSpeed: 0, avgVehicleLength: 0, avgGap: 0, avgOccupancy: 0, numVehicles: 1}
},
"2020-10-23T07:26:00.000Z":{
"2": { avgSpeed: 0, avgVehicleLength: 0, avgGap: 0, avgOccupancy: 0, numVehicles: 1},
}
}
我想按日期、车辆类型和此值之和对数据进行排序。所以我从洛达斯得到了
const groupedItems = _(data.result)
.groupBy(item => new Date(new Date(item.timestamp).setSeconds(0,0)).toISOString())
.mapValues((array, sort) => _.groupBy(array, item => item.vehicleType))
.value();
我得到:
{
"2020-10-23T07:25:00.000Z":{
"2":[
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:00.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:01.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:59.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
}
],
"3":[
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:58.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":3
}
]
},
"2020-10-23T07:26:00.000Z":{
"2":[
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:26:00.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:26:01.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
}
]
}
}
这很好,但我想得到每种车辆类型的变量总和(速度、车辆长度、占用率),如下所示:
const data = {
"result":[
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:00.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:01.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:58.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":3
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:25:59.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:26:00.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
},
{
"intersectionId":77,
"deviceNumber":300,
"timestamp":"2020-10-23T07:26:01.000+0000",
"outstationId":null,
"occupancy":0,
"gap":0,
"journeyTime":null,
"speed":0,
"vehicleLength":0,
"vehicleType":2
}
]
};
{
"2020-10-23T07:25:00.000Z":{
"2": { avgSpeed: 0, avgVehicleLength: 0, avgGap: 0, avgOccupancy: 0, numVehicles: 3},
"3": { avgSpeed: 0, avgVehicleLength: 0, avgGap: 0, avgOccupancy: 0, numVehicles: 1}
},
"2020-10-23T07:26:00.000Z":{
"2": { avgSpeed: 0, avgVehicleLength: 0, avgGap: 0, avgOccupancy: 0, numVehicles: 1},
}
}
您试图做的是将多个值减少为一个值 谢天谢地,这个用例非常常见,这意味着JavaScript已经有了执行此类操作的方法(lodash也有一组方法,具体取决于您试图实现的目标) 根据您的问题陈述,我们需要总结对象列表的特定属性,例如:
const totalSpeed = _.sumBy(items, 'speed')
它将“拾取”每个项目的speed
属性并将它们相加
现在我们有了基本情况的解决方案,我们可以将项目列表缩减为包含汇总属性的对象:
constgroupeditems=\uU4(data.result)
.groupBy(item=>newdate(newdate(item.timestamp).setSeconds(0,0)).toISOString())
.mapValues(数组=>(数组)
.groupBy(项目=>item.vehicleType)
.mapValues(项目=>({
平均速度:uu.sumBy(项目“速度”),
avgGap:uu.sumBy(项目“差距”),
avgOccupancy:uu.sumBy(项目“占用率”),
平均车辆长度:uu.sumBy(项目“车辆长度”),
车辆数量:尺寸(项目)
}))
.value()
)
.value()
如果你想增加你的问题被当作垃圾邮件处理的机会,那么在问题的末尾加上毫无意义的字符串…
,肯定是一个很好的方法。如果你不认真对待你的问题,我们为什么要这样做?