如何根据对象(而不是数组)的属性执行合并排序
How do I perform a merge sort based on the property of an object (rather than an Array)?
Background
使用 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
对象进行排序,以便最终得到按"类型"排序的对象:
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
键应始终与{"type":"orange","UnitPrice":0.20}
匹配,2
键应始终与{"type":"banana","UnitPrice":0.30}
匹配,依此类推。
谢谢!
您无法对
对象上的键进行排序,但可以保留自己的排序键数组。
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
哦,如果您对排序的底层实现感到好奇,请参阅:
Javascript Array.sort 实现?
相关文章:
- CKEditor-对每个具有类名的属性执行一些操作
- 如何防止在javascript中执行继承属性的getter-setter方法
- 如何指定在执行控制台时要显示的属性.log对象
- 在单击onclick属性后的按钮时执行f:setPropertyActionListener
- 无法更新 Kendo-grid 中的值 - 无法读取未执行的“数据”属性
- 删除对象属性在执行删除操作之前生效
- Windows Phone浏览器控件执行JS函数来替换src属性
- 在初始化Javascript时执行的私有函数中设置公共属性
- 从子函数执行父函数;t更新父级'的属性
- javascript中作为对象属性值的自执行函数
- 修改时,哪些DOM元素属性会导致浏览器执行回流操作
- 我可以't获取单选按钮上的onclick属性以执行javascript函数
- 在多个(html)元素上循环执行相同的JavaScript函数属性更改
- 仅使用textbox方法和属性在confirm ok和cancel的代码隐藏中执行不同的代码
- 在Javascript中对对象属性执行字符串方法
- 在锚标记的 href 属性中执行 JavaScript
- 未捕获的类型错误:无法读取属性,JS 在页面呈现之前执行
- 如何根据对象(而不是数组)的属性执行合并排序
- JavaScript-基于发送对象属性执行函数
- 如何对javascript对象的属性执行计算并将其打印出来