javascript - 为什么 2 个 immutable.js 列表有很大不同?

标签 javascript immutable.js

我无法使用简单的深度对象比较来深入比较 2 个列表。

考虑以下代码:

import {fromJS} from 'immutable';
import {describe, it} from 'mocha';
import { expect } from 'chai';

const o = {a: 123};
const A = fromJS([o]);
const B = fromJS([]).push(fromJS(o));

describe('Check', () => {
  it('should be deep equal', () => {
    expect(A).to.deep.equal(B);
  });
});

为什么 Immutable.js 集合实际上有状态?

我看到像 chai-immutable 这样的库,但我想了解这种行为的目的?

最佳答案

Immutable.js 使用状态来提高效率,因此当您将某些内容添加到不可变列表中时,引用会有所不同,但它实际上不会复制所有内容并且时间复杂度为 O(n)。

正如他们的 Github 中所述:

These data structures are highly efficient on modern JavaScript VMs by using structural sharing via hash maps tries and vector tries as popularized by Clojure and Scala, minimizing the need to copy or cache data.

关于javascript - 为什么 2 个 immutable.js 列表有很大不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40408718/

相关文章:

javascript - 不可变JS : Merging two Lists by values

javascript - 有什么方法可以将 immutable.js 与 lodash 一起使用?

javascript - 将代码附加到现有函数的末尾

javascript - Jquery:如何在其他元素中隐藏元素?

javascript - 在 JavaScript 创建的输入中获取反斜杠

javascript - 获取嵌套值的简写

javascript - 为什么不可变不会提示尝试改变值(value)

javascript - 如何用 Jasmine 测试(行为驱动开发)来测试这个?

javascript - 使用超链接字段导出到 Excel

javascript - ImmutableJS 如何获取对象内部的值?