gpt4 book ai didi

scala - 如何深入比较scala.js中的两个类似js的对象?

转载 作者:行者123 更新时间:2023-12-05 09:20:18 26 4
gpt4 key购买 nike

由于 js.Dynamic.literal() != js.Dynamic.literal(), 测试两个文字是否相等的建议方法是什么?

我不想用特征来表征那些文字。我想知道它们是否完全相等。

我现在正在做的是以下内容

val js1 = literal()
val js2 = literal()
val json1 = JSON.stringify(js1)
val json2 = JSON.stringify(js2)
assert(json1 == json2) // true

注意:即使在 javascript 中,{} === {} 的计算结果为 false,所以我一开始就不应该感到惊讶。

最佳答案

您可以为类 JS 对象结构定义自己的结构相等性:

def jsStructuralEqual(a: Any, b: Any): Boolean = {
(a, b) match {
case (a: js.Array[_], b: js.Array[_]) =>
a.length == b.length &&
a.zip(b).forall((jsStructuralEqual _).tupled)

case _ if a.constructor == js.constructorOf[js.Object] &&
b.constructor == js.constructorOf[js.Object] =>
val aDict = a.asInstanceOf[js.Dictionary[Any]]
val bDict = b.asInstanceOf[js.Dictionary[Any]]
(aDict.keySet == bDict.keySet) &&
aDict.keySet.forall(key => jsStructuralEqual(aDict(key), bDict(key))

case _ =>
a == b
}
}

(未测试)

关于scala - 如何深入比较scala.js中的两个类似js的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126349/

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