javascript - 使用 Lodash groupby 和 map 转换对象数组

标签 javascript lodash

这就是我想做的,我想把下面的数组变成它后面的数组。谁能指出我正确的方向?

原始数据

[{
        "FeatureId": 1,
        "District": "ANE",
        "Temperature": 206,
        "RelativeHumidity": 20,
        "WindSpeed": 5,
        "WindGust": 15
      },
      {
        "FeatureId": 1,
        "District": "ANE",
        "Temperature": 196,
        "RelativeHumidity": 19,
        "WindSpeed": 5,
        "WindGust": 15
      },
      {
        "FeatureId": 2,
        "District": "AMO",
        "Temperature": 203,
        "RelativeHumidity": 54,
        "WindSpeed": 9,
        "WindGust": 18
      },
      {
        "FeatureId": 2,
        "District": "AMO",
        "Temperature": 184,
        "RelativeHumidity": 46,
        "WindSpeed": 12,
        "WindGust": 18
      }]

我想要的数据:

[
  {
    "FeatureId": 1,
    "District": "ANE",
    "TemperatureTrend": [ 206, 196 ],
    "RelativeHumidityTrend": [ 20, 19 ],
    "WindSpeedTrend": [ 5, 5 ],
    "WindGustTrend": [ 15, 15 ]
  },
  {
    "FeatureId": 2,
    "District": "AMO",
    "TemperatureTrend": [ 203, 184 ],
    "RelativeHumidityTrend": [ 54, 46 ],
    "WindSpeedTrend": [ 9, 12 ],
    "WindGustTrend": [ 18, 18 ]
  },

]

我试过组合 groupby 和 map,但无法解决问题。我也不确定如何记录这些步骤。

最佳答案

除了其他好的答案,您还可以使用 es6 解构。

var arr = [{
            "FeatureId": 1,
            "District": "ANE",
            "Temperature": 206,
            "RelativeHumidity": 20,
            "WindSpeed": 5,
            "WindGust": 15
          },
          {
            "FeatureId": 1,
            "District": "ANE",
            "Temperature": 196,
            "RelativeHumidity": 19,
            "WindSpeed": 5,
            "WindGust": 15
          },
          {
            "FeatureId": 2,
            "District": "AMO",
            "Temperature": 203,
            "RelativeHumidity": 54,
            "WindSpeed": 9,
            "WindGust": 18
          },
          {
            "FeatureId": 2,
            "District": "AMO",
            "Temperature": 184,
            "RelativeHumidity": 46,
            "WindSpeed": 12,
            "WindGust": 18
          }]

var temp = arr.reduce((o, d) => (
              { WindSpeed, WindGust, RelativeHumidity, Temperature, ...rest } =
                    ({ 
                       ...d
    		      , ...{ 
		          RelativeHumidityTrend:  (o[d.FeatureId] && o[d.FeatureId].RelativeHumidityTrend || []).concat(d.RelativeHumidity)
		       	  , WindSpeedTrend:  (o[d.FeatureId] && o[d.FeatureId].WindSpeedTrend || []).concat(d.WindSpeed)
     	       		  , WindGustTrend:  (o[d.FeatureId] && o[d.FeatureId].WindGustTrend || []).concat(d.WindGust) 
                          , TemperatureTrend:  (o[d.FeatureId] && o[d.FeatureId].TemperatureTrend || []).concat(d.Temperature)
			}
    		})
    	        , o[d.FeatureId] = rest
   	        , o
    	   ) , {})
              
    var result = Object.values(temp)
    console.log(result)

关于javascript - 使用 Lodash groupby 和 map 转换对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52961776/

相关文章:

Javascript:过滤掉一组对象并根据键而不是值进行选择

javascript - 通过匹配父项或子项中的关键字过滤嵌套数组

javascript - 为什么lodash中的_.defaults()需要大量CPU时间?

javascript - ng-minlength 删除所有文本后中断

javascript - 从列表中选择特定数量的项目

javascript - 许多 CDNjs 与一个缩小的本地 js

javascript - 如何使用lodash根据条件获取JavaScript中两个数组之间的差异?

javascript - Webpack 暴露静态文件?

javascript - 如何使这个滚动条使用JavaScript工作

javascript - angular.isBoolean 的实现?