javascript - 如何根据对象(而不是数组)的属性执行合并排序?

标签 javascript algorithm search sorting

背景

使用 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}                  
                   }

注意:原始(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 implementation?

关于javascript - 如何根据对象(而不是数组)的属性执行合并排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066022/

相关文章:

javascript - 在调整浏览器窗口大小时防止 jQuery 弹出窗口换行

用于递归计算ln(n!)的java方法

php - 如何搜索数组列表查询php

apache solr 作为服务托管

algorithm - 朴素的字符串搜索算法 - 平均时间

javascript - 阻止它滚动到页面顶部

javascript - 如何阻止javascript悬停激活所有其他悬停?

javascript - 如何使用 forEach 遍历序列中的数组

algorithm - 根据任意字符串和长度生成字符组合——类似于排列

algorithm - 使用动态规划的矩阵乘法的子问题图