请在
2024 年 Clojure 状态调查!
中分享您的想法。
欢迎!请参阅
关于
页面以了解有关此工作的一些更多信息。
GitHub 登录
所有活动
问题
未回答
标签
提问一个问题
关于
提问一个问题
在可能的情况下,ES6 迭代器应使用 IIterable
0
票
asked
Jan 15, 2018
在
ClojureScript
由
jira
动力
ES6 可迭代对象:
https://mdn.org.cn/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
在 React 中的使用:
https://github.com/facebook/react/blob/30dac4e78de02fb427ee82013160ae875128d7a2/packages/react/src/ReactElementValidator.js#L195-L204
(defn es6-iterator**
[coll]
(if (implements? IIterable coll)
(let [it (-iterator ^not-native coll)]
#js{:next (fn []
(if ^boolean (.hasNext it)
#js{:value (.next it), :done false}
#js{:value nil, :done true}))})
;; 转换为朴素的第一/下一次迭代器
(ES6Iterator. (seq coll))))
;; 测试可以使用往返测试
(es6-iterator-seq (es6-iterator (hash-map 0 1 2 3)))
(defn es6-iter-consume
[it]
(while (not (.-done (.next it)))))
(dotimes [_ 3]
(let [xs (vec (range 3000))
runs 1000]
(simple-benchmark []
(es6-iter-consume (es6-iterator xs)) runs)
(simple-benchmark []
(es6-iter-consume (es6-iterator** xs)) runs)))
大约在 Chrome 上提高了 4 倍的速度。还请注意,生成的垃圾对象要少得多。
请求
jira
请
登录
或
注册
以添加评论。
请
登录
或
注册
以回答此问题。
1
答案
0
票
answered
Jun 26, 2019
由
jira
参考:[https://clojure.atlassian.net/browse/CLJS-2472](https://clojure.atlassian.net/browse/CLJS-2472) (由 aralo 报告)
请
登录
或
注册
以添加评论。
欢迎来到 Clojure 常见问题解答,您可以在此处提问并获得 Clojure 社区成员的答案。
相关问题
集合哈希器应使用迭代器
random-uuid 应当在使用情况下使用密码学强度高的 PRNG
如果可能,请使用 transients 和 select-keys
如果尝试使用 :refer :all,将显示可怕的错误信息
增强数值推理,如果 + number? 测试在局部变量上,应成功分支中的局部变量进行标记
分类
所有分类
Clojure
(1.5k)
ClojureScript
(610)
ClojureCLR
(25)
贡献库
(719)
工具
(72)
元数据
(19)
其他
(91)
...