【问题标题】:nodejs sort object by numeric value desc with unknown keys?nodejs通过带有未知键的数值desc对对象进行排序?
【发布时间】:2016-03-19 16:56:59
【问题描述】:

当键未知时,如何按值 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 并保持顺序?

【问题讨论】:

  • 完全没有,因为对象没有顺序。
  • 由于对象键没有定义的顺序,具有相同数据但顺序不同的两个 JSON 在所有目的上都是相同的。问题是为什么想要一个特定的订单?
  • 是的,仅仅因为它代表了一个排名并且在数据结构内部,我还想以特定的顺序表示数据,而不必在我在 php 中处理它们或其他任何东西时使用它们。

标签: javascript node.js


【解决方案1】:

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

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

这行得通:

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
}

【讨论】:

    【解决方案2】:

    那么近……

    将您的地图线更改为

    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
    

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多