NodeJS使用未知键按数值desc对对象进行排序

nodejs sort object by numeric value desc with unknown keys?

本文关键字:desc 对象 排序 未知 NodeJS      更新时间:2023-09-26

当键未知时,如何按值 DESC 对此对象进行排序?

var themen = {"Eisenbahn":2,"Technik":2,"Mathematik":3,"Automobil":4,"Physik":1,"Computer":2,"Ökonomie":1}

编辑:

以下代码生成一个适合我要求的 Map,不幸的是它无法通过 JSON.stringify() 转换为 json,而只返回 {}

themen = new Map(Object.keys(themen).map(function(v) {
    return [v, themen[v]]
}).sort(function(p,t) {
    return t[1] - p[1];
}));

任何想法如何使其达到 JSON 并保持顺序?

对象没有顺序,向对象添加属性的顺序就是它们出现的顺序。

因此可以基于第一个对象构建一个对象,并按照您喜欢的顺序添加属性。

这有效:

var orderThemen = function (themen) {
  var themens = Object.keys(themen)
  var order = {}
  var output = {}
  themens.forEach(function (key) {
    var auxThemen = themen[key]
    if (!order[auxThemen]) order[auxThemen] = []    
    order[auxThemen].push(key)
  })    
  Object.keys(order).forEach(function (key) {
    var level = order[key]
    level.forEach(function (themen) {
      output[themen] = key
    })
  })
  return output
}

这么近...

将地图线更改为

themen = Object.keys(themen).map(function(v) {
    return [v, themen[v]]
}).sort(function(p,t) {
    return t[1] - p[1];
});

new Map()创建一个 Map 对象,该对象是其他内容。

编辑:

除非您再次想要该对象...

var result = {}
Object.keys(themen).map(function(v) {
    return [v, themen[v]]
}).sort(function(p,t) {
    return t[1] - p[1];
}).forEach(function(v){
    result[v[0]] = v[1];
});
console.log(result); // => sorted object