如果可以使用for...of来迭代可迭代对象,为什么标准不支持在可迭代对象上使用.map(...?对于包括for...of的生成器来说,这可能只是一个合成糖,所提供的函数在for循环中运行.

例如,它可以是糖,用于:

function* map(iterable, mapFn) {
  for (const item of iterable) {
    yield mapFn(item);
  }
}

What is the fundamental limitation that prevents this behavior?

加分:如果后续函数不改变数据,JS引擎(例如,V8)是否会复制数据以将其转换为数组?例如:

const res = [...extremelyLargeSet].reduce((acc,cur)=>acc+cur.value,0) 

我通常喜欢SetMap,因为它们是某些应用程序最合适的数据 struct ,但在某些情况下,我担心可能会出现重复.

推荐答案

没有根本的技术原因,其他迭代程序没有类似数组的方法,good news, there's a stage-3 proposal for iteratable helpers个可以添加这些方法.还有大约other proposals个处于不同阶段的人在处理迭代器/可迭代/集/映射的相关问题.

至于您的第二个问题(请不要在一个问题中发布两个问题,以后!):Send返回了可迭代的浅表副本,据我所知,V8至少永远不会仔细判断它是否真的要这样做.原始的迭代器应该只在它不被使用时才被GC.如果您担心保存超 Big Data 的内存开销(直到JS引擎清理它,这可能需要或可能不需要等待标记/清除/压缩阶段),那么这些数据可能太大而无法在内存中方便地处理(应该在数据库或磁盘上完成)-但是担心注定要被垃圾收集的数组的大小,如果它当前没有造成任何问题,肯定是不成熟的优化.

Typescript相关问答推荐

Typescript自定义键映射

React Hook中基于动态收件箱定义和断言回报类型

角形标题大小写所有单词除外

是否使用非显式名称隔离在对象属性上声明的接口的内部类型?

带switch 的函数的返回类型的类型缩小

通过字符串索引访问对象';S的值时出现文字脚本错误

了解类型规则中的关键字

如何将类似数组的对象(字符串::匹配结果)转换为类型脚本中的数组?

界面中数组中的混合类型导致打字错误

对有效枚举值的常量字符串进行常规判断

在单独的组件中定义React Router路由

在抽象类构造函数中获取子类型

我的类型谓词函数不能像我预期的那样工作.需要帮助了解原因

Route.ts文件中未导出HTTP方法

有没有一种方法可以防止我的组件包在其中安装样式组件'; node 模块中的s目录

typescript如何从映射类型推断

换行TypeScript';s具有泛型类型的推断数据类型

React-跨组件共享功能的最佳实践

如何使用 runInInjectionContext 中的参数测试功能性路由防护

Typescript 子类继承的方法允许参数中未定义的键