如何在 Clojurescript 中循环一个 JavaScript 对象并将每个对象推送到一个数组中

How to loop a JavaScript object and push each into an array, in Clojurescript

本文关键字:一个 对象 数组 Clojurescript JavaScript 循环      更新时间:2023-09-26

我怎样才能转换这个函数(到Clojurescript),它接受一个JavaScript对象并将其内容推送到数组中。

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))))