2016-01-21 60 views
-1

我有这样 对象{ alexa排名:1, 约翰:5, 比尔:2 }排序的对象与JS

我需要的值进行排序,从大到小,但我看不到如何做到这一点。有任何想法吗?

+0

你不想。 –

+4

对象中没有顺序,无法排序 – adeneo

+1

如果您的意思是“使用排序后的元素打印对象”,那么您可以(也应该)编辑问题:) – wil93

回答

0

var objUnordered = { alexa: 1, John: 5, Bill: 2 }; 
 
var objOrdered = {}; 
 
var sortable = []; 
 

 
for (var element in objUnordered){ 
 
    sortable.push([element, objUnordered[element]]); 
 
} 
 
sortable.sort(function(a, b) {return a[1] - b[1]}) 
 
for(var key in sortable){ 
 
    objOrdered[sortable[key][0]] = sortable[key][1]; 
 
} 
 

 
console.log(objOrdered); //print this -> Object { alexa=1, Bill=2, John=5}

+0

工作,谢谢soooo多!!! – user3474502

1

,您仍然可以拿到钥匙的数组进行排序 - 然后就循环键数组来访问你的对象以正确的顺序:

var obj = { alexa: 1, John: 5, Bill: 2 }; 
var sortedKeys = Object.keys(obj).sort(function(a, b) { 
    return obj[a] - obj[b] 
}); 

sortedKeys.forEach(function(k) { 
    console.log(obj[k]); 
}); 

创建从对象的数组:

var sortedArray = Object.keys(obj).sort(function(a, b) { 
    return obj[a] - obj[b] 
}).map(function(k) { 
    var o = {}; 
    o[k] = obj[k]; 

    return o; 
}); 
+0

这可行,但我需要的输出是{Alexa :1,Bill:2,John:5}当它被排序时,我需要知道属于每个数字的键,因为这些值可以重复... – user3474502

+0

将格式更改为数组,类似'[{名称:'Alexa',麻木:1},{名称:'比尔',麻木:2}]',那么你可以对它进行排序,并保持跟踪 – adeneo

+0

@ user3474502对象不*排序。 “{Alexa:1,Bill:2,John:5}”与“{Alexa:1,John:5,Bill:2}”完全一样,对它进行排序是一个无稽之谈。 –