JavaScript中高效的排序数据结构
Efficient Sorted Data Structure in JavaScript
我正在寻找一种方法来获取一堆JSON对象,并将它们存储在一个数据结构中,该数据结构既允许快速查找,也允许快速操作,这可能会改变特定对象在结构中的位置。
示例对象:
{
name: 'Bill',
dob: '2014-05-17T15:31:00Z'
}
给定按名称升序和dob降序排序,您将如何存储对象,以便如果我有一个新对象要插入,我可以很快知道在数据结构中放置它的位置,以便根据其他对象对对象的位置进行排序?
在查找方面,我需要能够说,"把索引12处的对象给我",它会很快把它拉出来。
我可以修改对象以包括有用的数据,例如在属性中存储当前索引位置等,例如{_indexData:{someNumber:23,someNeighbour:Object}},尽管我不希望这样做。
我看过b-trees,认为这可能是答案,但不确定如何使用多个排序参数(名称:升序,dob:降序)实现,除非我实现了两个树?
有人有解决这个问题的好方法吗?
首先需要做的是将所有对象存储在一个数组中。考虑到你想"给我索引12的对象",这将是你在查找方面的最佳选择,你可以像data[11]
一样轻松访问该对象
现在来存储和排序它们,考虑一下您有以下这些对象的数组:
var data = [{
name: 'Bill',
dob: '2014-05-17T15:31:00Z'
},
{
name: 'John',
dob: '2013-06-17T15:31:00Z'
},
{
name: 'Alex',
dob: '2010-06-17T15:31:00Z'
}];
以下简单函数(取自此处)将帮助您根据它们的属性对它们进行排序:
function sortResults(prop, asc) {
data = data.sort(function(a, b) {
if (asc) return (a[prop] > b[prop]);
else return (b[prop] > a[prop]);
});
}
第一个参数是要排序的属性名称,例如"name",第二个参数是升序的布尔值,如果为false,则按降序排序。
下一步,您需要调用此函数并给出所需的值:
sortResults('name', true);
和沃拉!您的数组现在按名称升序排列。现在,您可以访问像data[11]这样的对象,就像您希望访问它们一样,它们也会被排序。
您可以在此处使用示例。如果我遗漏了什么或不能正确理解你的问题,请随时解释,我会调整我的解决方案。
编辑:再看一遍你的问题,我想我错过了动态添加对象的那一点。使用我的解决方案,每次添加对象时都必须调用sortResults
函数,这可能会变得昂贵。
- 角度未排序数据
- JS库支持各种数据结构?(如爪哇的番石榴)
- JavaScript数据结构
- 排序数据表
- Node JS,传统的数据结构?(如Set等),任何类似Java.util的node
- 更正扁平数据模型和noSQL数据结构
- 用于筛选无模式集合的最快数据结构
- 将数据结构转换为二进制数据
- JavaScript 设置具有对数搜索时间的数据结构
- 更好的数据结构来处理这个数组
- Firebase 数据结构理念
- AngularJs orderby 过滤器无法正确排序数据
- 基于其他数据结构更新 AngularJS 中的数据结构
- JavaScript - JSON 数据结构的构建 - 如何使用变量值更改键名
- 如何处理在javascript中访问数据结构的两个回调
- 有效地对字典(或 JS 中的任何键值数据结构)进行排序word_number键
- JavaScript中高效的排序数据结构
- angularJS:将重新排序列表与数据结构同步
- JavaScript数据结构,便于进行多维排序
- 是否存在一种数据结构,具有高效的插入/删除,但具有位置排序