使用JavaScript,我需要根据该对象的给定属性对大型JSON对象进行排序。 我假设合并排序是最快的方法。如果这不是最快的方法,请告诉我是什么。有一些针对数组的合并排序的在线示例,但对象很少。这是一个示例对象:
fruitForSale = {
1: {"type":"orange","UnitPrice":0.20},
2: {"type":"banana","UnitPrice":0.30},
3: {"type":"pear","UnitPrice":0.10},
4: {"type":"apple","UnitPrice":0.50},
5: {"type":"peach","UnitPrice":0.70}
}
使用合并排序(或更快的算法),我如何对fruitForSale
对象进行排序,以便最终得到一个按'type'排序的对象:
fruitForSale = {
4: {"type":"apple","UnitPrice":0.50},
2: {"type":"banana","UnitPrice":0.30},
1: {"type":"orange","UnitPrice":0.20},
5: {"type":"peach","UnitPrice":0.70},
3: {"type":"pear","UnitPrice":0.10}
}
注意:原始的keys
(1,2,3,4& 5)需要保持分配到各自的对象,因此1
的密钥应始终与{{1}匹配并且{"type":"orange","UnitPrice":0.20}
的密钥将始终与2
匹配,依此类推。
谢谢!
答案 0 :(得分:2)
您无法对对象上的键进行排序,但您可以保留自己的排序键数组。
var fruitForSale = {
1: {"type":"orange","UnitPrice":0.20},
2: {"type":"banana","UnitPrice":0.30},
3: {"type":"pear","UnitPrice":0.10},
4: {"type":"apple","UnitPrice":0.50},
5: {"type":"peach","UnitPrice":0.70}
},
sortedKeys = Object.keys(fruitForSale).sort(function (i,j) {
return fruitForSale[i]["type"] > fruitForSale[j]["type"];
});
示例:http://jsfiddle.net/X2hFt/(控制台上显示的输出)
在任何地方都不支持Object.keys,但如果您需要轻松填充,则可以填充。 查看强>:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
哦,如果您对sort的底层实现感到好奇,请参阅: