【问题标题】:Sorting an Object of Objects [duplicate]对对象的对象进行排序[重复]
【发布时间】:2019-12-24 23:57:05
【问题描述】:

我目前有一个对象的对象,我希望根据对象值的一个对象对三个对象的对象进行排序。

例如,如果我有

{ A : { 1: 5, 2: 10,  3: 7}, 
  B : { 1: Alpha, 2: Beta, 3: Charlie}, 
  C : { 1: Z, 2: Y, 3: X} 
}

我想按值(按降序)对A 中的对象进行排序,同时保持键的完整性。 BC 也进行了同样的排序(按顺序)。

生成的数组将是 [10, 7, 5][Beta, Charlie, Alpha][Y, X, Z]

【问题讨论】:

  • A 中的所有值都是唯一的吗?
  • 问题在这里得到解答:Sort two arrays the same way
  • A 对象转换为类似[[1, 5], [2, 10], [3, 7]] 的数组。按每个子数组的第二个元素对其进行排序。然后按照该排序数组中每个子数组的第一个元素的顺序创建结果数组,它们是每个原始属性的元素。
  • @Barmar A 中的值是唯一的。谢谢你的方法,我会研究一下。

标签: javascript sorting object


【解决方案1】:

使用Object.values()Object.entries().sort()

var obj = 
{ A : { 1: 5, 2: 10,  3: 7}, 
  B : { 1: "Alpha", 2: "Beta", 3: "Charlie"}, 
  C : { 1: "Z", 2: "Y", 3: "X"} 
};
obj = Object.values(obj);

var sorted = Object.entries(obj[0]).sort((a, b) => b[1] - a[1]);

var output = [];

sorted.forEach((v, i) => {
    output.push(obj.map(e => e[v[0]]));
})

console.log(output);

//new array with first of each array
var newarr = output.map(a => a[0]);

console.log(newarr);

【讨论】:

  • 谢谢。下一步是提取每个数组的第一个元素并将其存储到一个新数组中。这是针对每个第 n 个元素完成的。
  • 我仍然遇到一个错误,其中定义的 obj 不是一个数组,而是一个对象。因此,.sort 方法无法运行。
猜你喜欢
  • 2022-01-10
  • 2010-11-15
  • 2012-02-28
  • 2016-01-16
  • 2016-11-25
  • 1970-01-01
  • 2020-05-03
  • 2012-01-17
  • 2016-03-10
相关资源
最近更新 更多