Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象的ClojureScript deep equal_Javascript_Interop_Clojurescript_Deepequals - Fatal编程技术网

JavaScript对象的ClojureScript deep equal

JavaScript对象的ClojureScript deep equal,javascript,interop,clojurescript,deepequals,Javascript,Interop,Clojurescript,Deepequals,我遇到了如何在ClojureScript中比较两个JavaScript对象以实现深度相等的问题,因为(=var1 var2 var3…)仅适用于Clojure/ClojureScript集合和数字 (= (js-obj "a" 1) (js-obj "a" 1)) ;; => false 当我写这个问题的时候,我找到了答案。。。但是我会询问并回答它,也许对其他人有帮助。由于“=”函数可以比较ClojureScript集合,因此一个即时解决方案应该是: (= (js->clj (js

我遇到了如何在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的闭包库具有处理普通JavaScript的健壮解决方案

这并不是一个真正的深度相等:
(goog.object/equals{a}js[1]}js{a}js[1]}=>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