猿问

按属性值排序JavaScript对象

按属性值排序JavaScript对象

如果我有一个JavaScript对象,例如:

var list = {
  "you": 100, 
  "me": 75, 
  "foo": 116, 
  "bar": 15};

有没有办法根据值对属性进行排序?所以我最终得到了

list = {
  "bar": 15, 
  "me": 75, 
  "you": 100, 
  "foo": 116};


桃花长相依
浏览 1439回答 4
4回答

慕哥9229398

将它们移动到一个数组,对该数组进行排序,然后将该数组用于您的目的。这是一个解决方案:var maxSpeed = {     car: 300,      bike: 60,      motorbike: 200,      airplane: 1000,     helicopter: 400,      rocket: 8 * 60 * 60};var sortable = [];for (var vehicle in maxSpeed) {     sortable.push([vehicle, maxSpeed[vehicle]]);}sortable.sort(function(a, b) {     return a[1] - b[1];});//[["bike", 60], ["motorbike", 200], ["car", 300],//["helicopter", 400], ["airplane", 1000], ["rocket", 28800]]一旦拥有了数组,就可以按照自己喜欢的顺序从数组中重建对象,从而实现您的目标。这可以在我所知道的所有浏览器中工作,但它将依赖于实现的怪癖,并且可能随时中断。您永远不应该假设JavaScript对象中元素的顺序。

饮歌长啸

为了完整起见,此函数返回已排序的对象属性数组:function sortObject(obj) {     var arr = [];     for (var prop in obj) {         if (obj.hasOwnProperty(prop)) {             arr.push({                 'key': prop,                 'value': obj[prop]             });         }     }     arr.sort(function(a, b) { return a.value - b.value; });     //arr.sort(function(a, b) { a.value.toLowerCase().localeCompare(b.value.toLowerCase()); }); //use this to sort as strings     return arr; // returns array}var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};var arr = sortObject(list);console.log(arr);      // [{key:"bar", value:15}, {key:"me", value:75}, {key:"you", value:100}, {key:"foo", value:116}]以上代码的Jsfiddle就在这里。此解决方案基于本文。这里有用于排序字符串的更新小提琴。您可以从中删除其他.toLowerCase()转换,以进行区分大小写的字符串比较。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答