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()
如果你想增加你的问题被当作垃圾邮件处理的机会,那么在问题的末尾加上毫无意义的字符串
,肯定是一个很好的方法。如果你不认真对待你的问题,我们为什么要这样做?