首页 > 解决方案 > 基于 Javascript 中的维度值对 JSON 数组进行排名

问题描述

我有一组 Javascript 对象。需要根据“cr_sales_value_usd”对给定时间段内每个公司的所有国家/地区进行排名。排名从 1 开始,并针对特定公司持续一段时间。为新公司或不同的时间范围提供新的排名。

此外,我们可能会遇到数据中可能不存在“公司”的情况。在这种情况下,排名完全基于时间。因此,现在我们根据特定时间范围内的“cr_sales_value_usd”对不同的运营国家进行排名。

[
   {
      "cr_sales_value_usd":160276,
      "operating_country":"UK",
      "corporation":"ZERIA SHINYAKU KOG",
      "rank":null,
      "timestamp":"2020-01-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":2745,
      "operating_country":"Norway",
      "corporation":"ZERIA SHINYAKU KOG",
      "rank":null,
      "timestamp":"2020-01-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":2037,
      "operating_country":"Ireland",
      "corporation":"ZERIA SHINYAKU KOG",
      "rank":null,
      "timestamp":"2020-01-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":32411301,
      "operating_country":"Germany",
      "corporation":"ZENTIVA",
      "rank":null,
      "timestamp":"2020-01-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":470194,
      "operating_country":"Greece",
      "corporation":"ZENTIVA",
      "rank":null,
      "timestamp":"2020-01-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":214375,
      "operating_country":"Slovakia",
      "corporation":"ZENTIVA",
      "rank":null,
      "timestamp":"2020-01-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":2138,
      "operating_country":"Hungary",
      "corporation":"ZENTIVA",
      "rank":null,
      "timestamp":"2020-02-01T00:00:00.000Z"
   },
   {
      "cr_sales_value_usd":242,
      "operating_country":"Norway",
      "corporation":"ZENTIVA",
      "rank":null,
      "timestamp":"2020-02-01T00:00:00.000Z"
   }
]

我可以想到一个复杂的 for 循环类型的代码,但正在寻找一个更清洁的解决方案。谢谢

标签: javascript

解决方案


因此,如果我理解正确,您想根据cr_sales_value_usd键的值对数组中的对象进行排序。

如果是这样,这应该可以解决问题:

arr.sort((a, b) => a.cr_sales_value_usd - b.cr_sales_value_usd);

所以只需申请

sort((a, b) => a.cr_sales_value_usd - b.cr_sales_value_usd);

在对象数组上。


推荐阅读