在“ orderBy”之后保留“ GroupBy”对象格式

问题描述

为了制作统计数据并在项目中使用某些图表,我使用Lodash的.groupBy()方法。 这是对一些国家/地区商店的计数。

长话短说,我有很多带有乡村属性的物品(商店),并且基本上像这样将它们分组:

const countries = groupBy(shops,shop => shop[country])

哪个输出(对象类型):

{
  Austria: [{...},{...},{...}],Canada: [{...},Italy: [{...}],Japan: [{...},{...}]
}

实际上,它没有进行任何排序,只是原始数据进入循环的顺序。我需要以某种方式对其进行排序,以获取此信息:

{
  Japan: [{...},Austria: [{...},{...}]
  Canada: [{...},Italy: [{...}]
}

我自然会使用.orderBy()方法进行查找,但它会输出一个数组,并且丢失了键名:

const sortedCountries = orderBy(countries,countries.length,'desc')
[
  [{...},[{...},{...}]
  [{...},[{...}]
]

在此状态下不可用。我需要保留原始对象格式并保留键(国家/地区名称)。

我知道并找到了几种按键值对对象进行排序的方法,但是每次都要求键名必须保持一致,而在这里不是这种情况。

我现在迷路了。尝试了太多东西以保持跟踪,但没有什么接近成功。任何帮助欢迎!谢谢。


如果您想知道为什么要获得此订购商品,这是因为在图表中,我需要保留前4个(最高)国家,然后将所有其他国家/地区再次归为一个“其他”类别。

这一切都在前一段代码之后的for循环中进行,如下所示:

const props = Object.keys(countries)
for (const prop in props) {
  const labelText = prop // This is the country name we got in the object
  const value = countries[prop].length || 0
}

然后将其直接发送到统计图类中,因此,在这一点上,在循环中,我将无法进行任何排序。

还是我?如果有我无法想到的解决方法,请告诉我。

谢谢!


编辑:我逐渐开始假设JS将通过按字母顺序对键进行排序来呈现对象,无论如何,这将使我的请求毫无意义……有人可以确认吗? / p>

解决方法

您可以为此编写一个简单的代码。

const sortedKeys = Object.keys(countries).sort((k1,k2) => countries[k2].length - countries[k1].length);

如果sortedKeys不够用,您可以基于它重建对象。

const sortedCountries = sortedKeys.reduce((acc,cur) => {
  acc[cur] = countries[cur];
  return acc;
},{});

享受!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...