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

时间:2016-11-03 18:23:20

标签: 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这样的库,但我想了解这种行为的目的吗?

1 个答案:

答案 0 :(得分:1)

Immutable.js使用状态使其有效,因此当您向不可变列表添加内容时,引用将不同但它实际上不会复制所有内容并且为O(n)。

正如他们Github中所述:

  

这些数据结构在现代JavaScript虚拟机上非常高效,通过使用Clojure和Scala推广的散列映射尝试和矢量尝试进行结构共享,最大限度地减少了复制或缓存数据的需要。