如何解决在“ 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;
},{});
享受!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。