ES6 将可迭代转换为数组时间复杂度
Posted
技术标签:
【中文标题】ES6 将可迭代转换为数组时间复杂度【英文标题】:ES6 Convert iterable to array time complexity 【发布时间】:2019-05-07 05:46:07 【问题描述】:我想知道将可迭代对象(例如 MapIterator)转换为数组的时间复杂度是多少。 假设我有这个代码:
const Component = ( map ) =>
return (
<Fragment>
Array.from(map.values()).map(item => <div key=item.key>item.name</div>)
</Fragment>
)
每个 Array.from() 的时间复杂度是多少,是我想的 O(n) 还是因为它的 MapIterator 以某种方式更快地从类数组转换为数组。
我的用例是我想将项目(需要访问的)保存为性能问题的映射,但我必须将它们作为数组运行。
出于这个问题的目的,我可以保存状态或使用选择器或类似的东西
你们觉得呢?
【问题讨论】:
如果您关心性能,最好不要将任何内容转换为数组,只需将数据作为可迭代对象处理,将所有处理逻辑直接应用于可迭代对象。这是一个可以处理的库 - iter-ops. 【参考方案1】:Array.from()
是 O(n) 是正确的。如果您担心性能,您可以做的最简单的改进就是不要将值迭代两次。 Array.from()
已经接受 map
函数作为第二个可选参数:
Array.from(map.values(), ( key, name ) => <div key=key>name</div>)
【讨论】:
我不知道这是一个有效的语法。阅读文档我看到了 mapFn,很酷!所以将可迭代对象转换为数组必须像我想的那样是 O(n) 吧?这实际上解决了我的特殊问题,因为我必须映射值,所以我已经不得不花费 O(n)。 是的,一个迭代器在 O(n) 时间内被消耗,Array.from()
does not have any special cases for builtin types that are O(1) in the specification.以上是关于ES6 将可迭代转换为数组时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章