Javascript Clojurescript 中的传播运算符?
Javascript spread operator in Clojurescript?
我正在尝试在 clojurescript 中实现以下 javascript 代码:
const a = {
"foo": "bar",
//...
};
let b = {
...a,
//^ what is the clojurescript equivalent for this?
"newprop": 10,
};
我曾尝试 assoc-in
,认为它的行为类似于 clojure 映射,但没有成功...
(def a {:foo "bar"})
(def b (assoc a :newProp 10))
这实际上只是将两张地图组合在一起。这可以用 merge
:
来完成
(def a {"foo" "bar"}) ; Emulating the constant
(def b {"newprop" 10})
(def c (merge a b)) ; {"foo" "bar", "newprop" 10}
我的问题不够清楚,我有一个来自外部 js 库的对象 defaultProps
。我的目标是创建此 js 对象的新实例并使用新道具扩展它,并将其反馈给需要 js 对象的 js 函数。这比我最初预料的要多。我终于设法通过 js->clj
和 clj->js
:
的一些杂耍来做到这一点
(def b
(clj->js (assoc (js->clj a) "newprop" 10)))
感谢您的回答!
为您提供另一种选择,您可以使用 goog.object
与 ClojureScript 中的 JavaScript 对象进行交互。以下代码将起作用:
(require 'goog.object)
(def a #js {:foo "bar"})
;; Modify `a` inline
(goog.object/set a "newprop" 10) ;; In JS, this is equivalent to a.newprop = 10
如果您想对 a
进行浅表复制并修改该值,您可以使用 clone
(其行为类似于展开运算符)。
;; Shallow copy a
(def b (goog.object/clone a))
;; Modify the cloned object
(goog.object/set b "newprop" 10)
如果您需要经常与 JavaScript 对象交互,可以使用一个简洁的库:https://github.com/binaryage/cljs-oops
我正在尝试在 clojurescript 中实现以下 javascript 代码:
const a = {
"foo": "bar",
//...
};
let b = {
...a,
//^ what is the clojurescript equivalent for this?
"newprop": 10,
};
我曾尝试 assoc-in
,认为它的行为类似于 clojure 映射,但没有成功...
(def a {:foo "bar"})
(def b (assoc a :newProp 10))
这实际上只是将两张地图组合在一起。这可以用 merge
:
(def a {"foo" "bar"}) ; Emulating the constant
(def b {"newprop" 10})
(def c (merge a b)) ; {"foo" "bar", "newprop" 10}
我的问题不够清楚,我有一个来自外部 js 库的对象 defaultProps
。我的目标是创建此 js 对象的新实例并使用新道具扩展它,并将其反馈给需要 js 对象的 js 函数。这比我最初预料的要多。我终于设法通过 js->clj
和 clj->js
:
(def b
(clj->js (assoc (js->clj a) "newprop" 10)))
感谢您的回答!
为您提供另一种选择,您可以使用 goog.object
与 ClojureScript 中的 JavaScript 对象进行交互。以下代码将起作用:
(require 'goog.object)
(def a #js {:foo "bar"})
;; Modify `a` inline
(goog.object/set a "newprop" 10) ;; In JS, this is equivalent to a.newprop = 10
如果您想对 a
进行浅表复制并修改该值,您可以使用 clone
(其行为类似于展开运算符)。
;; Shallow copy a
(def b (goog.object/clone a))
;; Modify the cloned object
(goog.object/set b "newprop" 10)
如果您需要经常与 JavaScript 对象交互,可以使用一个简洁的库:https://github.com/binaryage/cljs-oops