2016-11-03 2 views
0

Я не мог глубоко сравнить 2 списка, используя простое сравнение объектов.Почему 2 immutable.js Списки сильно отличаются?

Рассмотрим следующий код:

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

Здесь я не понимаю вопроса - наверняка, это закончится как два _дифференциальных объекта с просто теми же данными в них. Я ожидал бы, что равенство потерпит неудачу. – vlaz

+1

Immutable.js использует состояние, чтобы сделать его эффективным, так что когда вы добавляете что-то в неизменный список, ссылки будут разными, но на самом деле они не копируют все и не будут O (n) – juvian

+0

@juvian, спасибо. Я мог бы удалить свой вопрос или принять ваш комментарий в качестве ответа. –

ответ

1

Immutable.js использует состояние, чтобы сделать его эффективным, так что когда вы добавляете что-то в неизменяемый список, ссылки будут разными, но на самом деле они не будут копировать все и быть O (n).

Как указано в их Github:

Эти данные структуры являются высокоэффективными современных JavaScript виртуальных машин с помощью структурного обмена с помощью хэш-карт пытается и векторными попыток, как популяризировал Clojure и Scala, сводя к минимуму необходимость копирования или кеш-данных.