gpt4 book ai didi

javascript - Immutable.js 不按值进行比较

转载 作者:行者123 更新时间:2023-11-28 03:14:56 25 4
gpt4 key购买 nike

我确信我的做法不正确,但我正在尝试使用 Immutable.js 进行函数式编程,并且在按值比较对象时遇到问题。在文档中,Set 数据结构使用 Immutable.is 进行相等性和包含性测试,Immutable.is 的页面说明

值相等性检查的语义类似于 Object.is,但将不可变集合视为值,如果第二个集合包含等效值则相等

但是,当我在 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>

关于javascript - Immutable.js 不按值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59727875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com