Неизменный. js не сравнивая по значению - PullRequest
1 голос
/ 14 января 2020

Я уверен, что я как-то делаю это неправильно, но я пытаюсь использовать Immutable. js для функционального программирования, и у меня возникают проблемы при сравнении объектов по значению. В документации структура данных Set использует Immutable.is для тестирования на равенство и включение, а страница для Immutable.is сообщает

Value equality check with semantics similar to Object.is, but treats Immutable Collections as values, equal if the second Collection includes equivalent values

Однако, когда я тестирую это поведение на * Отладчик 1014 *, я получаю следующие результаты:

let x = {a:1}
let y = {a:1}
is(x,y) //False
is({a:1},{a:1}) //False
Set.of({a:1}).includes({a:1}) //False

Тогда я подумал, что, возможно, мне придется использовать карту Immutable вместо литералов объекта, но я все еще получаю следующее:

let x = Map({a:1})
let y = Set(Map({a:1}))
y.includes(x) //False

let x = []
x.push(Map({a:1}))
x.includes(Map({a:1})) //False

Я также получил аналогичные результаты, используя .include от Loda sh, поэтому я предполагаю, что есть нечто очевидное, чего я просто не вижу. Как сравнить элементы в списке по значениям?

1 Ответ

0 голосов
/ 14 января 2020

Перед выполнением сравнений на равенство объектов вам необходимо превратить ваш объект в Неизменяемую коллекцию .

Также необходимо выполнить сравнение на равенство с помощью Immutable.is (). метод.

const x = {a:1}
const y = {a:1}
const xImmutable = Immutable.Map(x)
const yImmutable = Immutable.Map(y)
console.log(Immutable.is(x, y)) //false
console.log(x === y) //false
console.log(Immutable.is(xImmutable, yImmutable)) //true
console.log(xImmutable === yImmutable) //false
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...