javascript - 如何在 Clojurescript 中循环 JavaScript 对象并将每个对象插入数组

标签 javascript clojure clojurescript om reagent

我如何将这个接受 JavaScript 对象并将其内容推送到数组中的函数(转换为 Clojurescript)。

function toKeyValueList(obj) {
  var arr = [];

  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      arr.push({
        key: key,
        value: obj[key]
      });
    }
  }

  return arr;
} 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    

(defn toKeyValueList [obj]
  ????
)

最佳答案

以下是 ClojureScript 的等价物:

(defn key-value [obj]
  (loop [acc [] ks (.keys js/Object obj)]
    (if (seq ks)
      (recur (conj acc (clj->js {(first ks) (aget obj (first ks))})) (rest ks))
      (clj->js acc))))

或者使用reduce代替循环/递归:

(defn key-value [obj]
  (clj->js
   (reduce (fn [acc k]
             (conj acc (clj->js {k (aget obj k)})))
           []
           (.keys js/Object obj))))

关于javascript - 如何在 Clojurescript 中循环 JavaScript 对象并将每个对象插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28039338/

相关文章:

javascript - Django D3从mongodb读取csv数据来绘制图表

clojure - httpclient默认会使用系统代理(clojure)吗?

clojurescript - 如何使用 ClojureScript 打开新窗口?

javascript - ClojureScript 和 Cloud Firestore for Firebase 的兼容性

javascript - 使用 Byte (UCS2) 修改 jpg 图像 Exif 输入 javascript

javascript - obj 文件中的 Threejs UV 映射

javascript - ClojureScript Leiningen 编译成单个 .js 文件?

clojurescript - 如何通过在试剂/重新框架中键入和从代码更新相同的输入字段?

javascript - 添加获取图片URL; JavaScript 变量内

用于一阶差分、二阶差分、...、n 阶差分的 Clojure 函数