当密钥未知时,如何按值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并保持秩序?
答案 0 :(得分:0)
对象没有顺序,向对象添加属性的顺序是它们出现的顺序。
因此可以基于第一个构建对象,并按照您喜欢的顺序添加属性。
这有效:
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
}
答案 1 :(得分:0)
如此接近......
将地图线更改为
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