Immutable.js 不按值比较

Immutable.js not comparing by value

我确定我做错了,但我正在尝试使用 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

但是,当我在 Firefox 的调试器上测试此行为时,我得到以下结果:

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

我也使用 Lodash 的 .includes 得到了类似的结果,所以我想有一些明显的东西我只是没有看到。 如何按值比较列表中的项目?

在进行对象相等性比较之前,您需要将您的对象变成Immutable collection

您还需要使用 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>