Javascript 持久数据结构:持久索引?

Javascript 持久数据结构:持久索引?,javascript,data-structures,functional-programming,lisp,Javascript,Data Structures,Functional Programming,Lisp,函数式编程利用不变的数据。当你修改一些东西的时候,你会重新体验“世界”,尽可能多地重复使用前一个化身,以用于你的增强世界 我正在探索JavaScript中的FP。我创建了一个类似于Lisp中列表的列表对象。你可以把一个新的头放到一个现有的尾巴上。在向持久列表添加项目时,我希望创建一个与列表一致的持久索引。因此,如果我cons将一个新联系人添加到联系人列表中,我可能希望索引姓氏和电话号码,这样我就可以快速定位项目,而无需启动完整的表格扫描 问:在JavaScript中,可以构建什么样的持久数据结构

函数式编程利用不变的数据。当你修改一些东西的时候,你会重新体验“世界”,尽可能多地重复使用前一个化身,以用于你的增强世界

我正在探索JavaScript中的FP。我创建了一个类似于Lisp中列表的列表对象。你可以把一个新的头放到一个现有的尾巴上。在向持久列表添加项目时,我希望创建一个与列表一致的持久索引。因此,如果我
cons
将一个新联系人添加到联系人列表中,我可能希望索引姓氏和电话号码,这样我就可以快速定位项目,而无需启动完整的表格扫描

问:在JavaScript中,可以构建什么样的持久数据结构来提供快速键控访问


也就是说,我认为这个想法是在构建扩展索引时重用以前的索引数据。除了将上一个索引上的所有键克隆到扩充索引之外,我发现这个问题让人麻木。如果使用克隆,则在以编程方式加载数据时会浪费大量内存。索引应该是内存有效的,并提供按值快速访问。

您可以使用某种自平衡二进制搜索树,就像您在任何其他语言中一样(尽管在许多语言中,已经提供了这样的数据结构)。每个插入平均花费
O(logn)
,包括将创建
O(logn)
新搜索节点的重新平衡


一个相当简单的数据结构是。Chris Okasaki的中有一个可爱的splay树函数实现。事实上,这本书中有很多非常酷的数据结构。强烈推荐。(如果您搜索,您可能会在网上找到冈崎的论文,该论文也有splay树实现。)

您可能会使用某种自平衡二进制搜索树,就像您在任何其他语言中一样(尽管在许多语言中,已经提供了这样的数据结构)。每个插入平均花费
O(logn)
,包括将创建
O(logn)
新搜索节点的重新平衡


一个相当简单的数据结构是。Chris Okasaki的中有一个可爱的splay树函数实现。事实上,这本书中有很多非常酷的数据结构。强烈推荐。(如果你搜索,你可能会在网上找到冈崎的论文,其中也有splay tree的实现。)

令人遗憾的是,人们关闭了真正的问题。对于JS实现,请查看mori中的“mori”和“feat”,我相信mori.JS中的
vectors
。令人遗憾的是,人们关闭了真正的问题。对于JS实现,请查看“mori”我相信mori.js的“壮举”也很适合。