[英]ClojureScript deep equal for JavaScript objects
我遇到了如何在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
最可靠的解决方案是使用Google的Closure Library中的goog.equals方法。
(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
一般来说,Google的Closure Library具有处理纯JavaScript的强大解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.