我无法使用简单的深层对象比较深入比较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这样的库,但我想了解这种行为的目的吗?
答案 0 :(得分:1)
Immutable.js使用状态使其有效,因此当您向不可变列表添加内容时,引用将不同但它实际上不会复制所有内容并且为O(n)。
正如他们Github中所述:
这些数据结构在现代JavaScript虚拟机上非常高效,通过使用Clojure和Scala推广的散列映射尝试和矢量尝试进行结构共享,最大限度地减少了复制或缓存数据的需要。