似乎没有好的标准库方法来做这样的事情?
let thismap = new Map([[1,2],[2,3]])
console.log(thismap.entries().reduce((prev, [a,b])=>prev + a * b, 0))
Run Code Online (Sandbox Code Playgroud)
Uncaught TypeError: thismap.entries(...).reduce is not a function
我认为这是由于 Entry() 函数返回迭代器所致?我不想这样做Array.from(thismap.entries()).reduce(...),因为这会不必要地在内存中构建数组。感觉好像我错过了一些东西,但我也不想重新实现应该在标准库中的东西。
我想如果我使用一个对象来代替(由于其他原因,这里不是一个令人满意的解决方案),entries() 本质上将是一个数组扩展而不是迭代器(尽管我认为它可以在考虑到内存效率的情况下实现)。但我仍然想知道如何减少迭代器
假设我有一个功能:
(defun distribution-to-list (distribution)
(check-type distribution hash-table)
(loop for key being each hash-key of distribution
using (hash-value value) nconc (loop repeat value collect key)))
Run Code Online (Sandbox Code Playgroud)
我想确保至少传入的哈希表的所有值都是整数,因为我使用它们将值重复到一个大列表中。check-type有什么办法可以在内循环之前做到这一点吗?或者让内部循环宏在尝试repeat字符串时抛出类型错误是否足够好?(或任何非整数类型)