我遇到了一个问题,如何在ClojureScript中比较两个JavaScript对象的深度相等性,因为(= var1 var2 var3...)只适用于Clojure/ClojureScript集合和数字。
(= (js-obj "a" 1) (js-obj "a" 1)) ;; => false
当我写这个问题的时候,我找到了解决方法...但我还是想问并回答它(也许可以帮助其他人)。
我遇到了一个问题,如何在ClojureScript中比较两个JavaScript对象的深度相等性,因为(= var1 var2 var3...)只适用于Clojure/ClojureScript集合和数字。
(= (js-obj "a" 1) (js-obj "a" 1)) ;; => false
当我写这个问题的时候,我找到了解决方法...但我还是想问并回答它(也许可以帮助其他人)。
由于“=”函数可以比较ClojureScript集合,因此一个即时的解决方案应该是:
(= (js->clj (js-obj "a" 1)) (js->clj (js-obj "a" 1))) ;; => true
这很丑,并且不能在实例化对象上工作,例如:
(= (js->clj (js/THREE.Vector3. 10 20 30)) (js->clj (js/THREE.Vector3. 10 20 30))) ;; => false
(ns my.name-space
(:import goog.object)
(:require [cljsjs.three]))
(.equals goog.object (js/THREE.Vector3. 10 20 30) (js/THREE.Vector3. 10 20 30))) ;; => true
(goog.object/equals #js {"a" #js [1]} #js {"a" #js [1]}) => false
。 - CurtainDog