相关疑难解决方法(0)

JavaScript中的不可变哈希和数组实现?

在javascript中是否有简单的不可变哈希和数组实现?我不需要最好的速度,合理的速度比克隆更好.

此外,如果Java或其他语言中的简单实现可以很容易理解并移植到JavaScript,那么它也会很好.

更新:

目标不仅仅是冻结散列(或数组),而是为了有效实现更新操作 - 更新不可变散列应该返回一个新的不可变散列.它应该比"克隆原始并更新它"更有效.

原生JS类型具有更新的复杂性,如O(1),克隆的复杂性将是O(n),具有特殊的不可变数据结构(我要求的)它将为0(log(n))

UPDATE2: JavaScript已经有Array/Hash:

是的,但它们是可变的,我需要类似但不可变的东西,基本上它可以通过克隆非常简单地完成,hash2 = hash1.clone(); hash2[key] = value但效率非常低,有些算法使它非常有效,而不使用clone.

hash1 = {}
hash2 = hash1.set('key', 'value2')
hash3 = hash1.set('key', 'value3)

console.log(hash1) // => {}
console.log(hash2) // => {key: 'value2'}
console.log(hash3) // => {key: 'value3'}
Run Code Online (Sandbox Code Playgroud)

解:

它不是不可变哈希的实现,但更像是我当前问题的黑客,也许它也有助于某人.

更多关于为什么我需要不可变数据结构 - 我使用Node.js和内存数据库.一个请求可以读取数据库,其他更新它 - 更新可能需要花费很多时间(调用远程服务) - 所以我无法阻止所有读取进程并等待更新完成,更新可能会失败并且数据库应该回滚.所以我需要以某种方式将(ACID)读写操作隔离到内存数据库中.

这就是为什么我需要不可变数组和哈希 - 来实现MVCC的种类.但似乎有一种更简单的方法可以做到这一点.而不是直接更新数据库 - 更新操作只记录对数据库的更改(但不直接执行) - 以"add 42 to array db.someArray"的形式.

最后 - 更新操作的产品将是这样的更改命令的数组,并且因为它可以非常快速地应用 - 我们可以阻止数据库应用它.

但是,看看javascript中是否存在不可变数据结构的实现仍然很有趣,所以我将保持这个问题的开放性.

javascript arrays hash immutability data-structures

7
推荐指数
2
解决办法
4123
查看次数

标签 统计

arrays ×1

data-structures ×1

hash ×1

immutability ×1

javascript ×1