使用特殊规则根据值对对象进行排序的最有效方法

问题描述 投票:0回答:1

我有一种情况,我想根据对象中的值(数字)创建一个数组,如下所示。然而,问题是,如果有多个键具有相同的值,那么我希望次要规则是根据字母顺序对数组进行排序。例如:

const object1 = {
  'Andy': 10,
  "loves": 10,
  "to": 0,
  "Have": 2,
  "tacos": 15,
  "when": 10,
  "he": 0,
  "is": 7,
  "sad": 4
};

const result = []

//Expected Result: ["he": 0, "to": 0, , "Have": 2,"sad": 4,"is": 7,'Andy': 10, "loves": 10, "when": 10, "tacos": 15]

因此,在这种情况下,有多个值为 0 的值,但由于字母顺序优先的次要规则,“he”将出现在数组中的“to”之前。

我知道我应该能够将对象转换为数组,然后根据值对其进行排序,但我不知道如何制定辅助字母顺序规则。谁能指导我实现这一目标的最佳方法是什么?

javascript arrays algorithm sorting object
1个回答
0
投票

您可以使用比较器在键上调用

String#localeCompare
来确定值相等时的排序顺序。

const object1 = {
  'Andy': 10,
  "loves": 10,
  "to": 0,
  "Have": 2,
  "tacos": 15,
  "when": 10,
  "he": 0,
  "is": 7,
  "sad": 4
};
const res = Object.entries(object1).sort(([k1, v1], [k2, v2]) =>
  v1 - v2 || k1.localeCompare(k2)).map(([k, v]) => ({[k]: v}));
console.log(res);

© www.soinside.com 2019 - 2024. All rights reserved.