为了账号安全,请及时绑定邮箱和手机立即绑定

更改_.groupBy()结果数据的顺序

更改_.groupBy()结果数据的顺序

紫衣仙女 2021-05-18 17:18:18
大家好,这是我的数组结构let data = [    {"name": "ragupathi", "siteID": 10},    {"name": "abi","siteID": 13},    {"name": "mahesh", "siteID": 12},]我想要基于siteID的组数据,所以我正在使用groupBy siteID让sample = _.groupBy(data,'siteID');当前输出是:{  "10": [    {      "name": "ragupathi",      "siteID": 10    }  ],  "12": [    {      "name": "mahesh",      "siteID": 12    }  ],  "13": [    {      "name": "abi",      "siteID": 13    }  ]}但我期望按ASC顺序输出名称{  "13": [    {      "name": "abi",      "siteID": 13    }  ],  "10": [    {      "name": "mahesh",      "siteID": 12    }  ],  "12": [   {      "name": "ragupathi",      "siteID": 10    }   ],}通过SiteID分组根据对象名称的属性对输出进行分组
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

由于不能保证道具的顺序,因此您必须利用Map或其他方法来获得所需的排序和输出。

您可以像这样使用Array.sortArray.forEachMap

let data = [{"name": "ragupathi", "siteID": 10},{"name": "abi", "siteID": 13},{"name": "abi","siteID": 13},{"name": "mahesh", "siteID": 12},{"name": "abi", "siteID": 13},{"name": "abi", "siteID": 13},{"name": "ragupathi", "siteID": 10}], 

map = new Map()


data

  .sort((a,b) => b.siteID - a.siteID)

  .forEach(x => map.set(x.siteID, [...(map.get(x.siteID) || []), x] || [x]))


console.log(map) // The map object output in your browser console

console.log(Array.from(map.values())) // The siteIds in array form    

将它们放在map对象中后,您可以通过siteIDlike轻松访问组map.get(13),您将获得siteID为13的分组项的数组。

您还可以始终通过Map.keys()方法获取将密钥存储在地图中的顺序


查看完整回答
反对 回复 2021-05-27
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信