Dictionary 无法以列表理解样式迭代es6中映射的键,因为键不是函数错误

Dictionary 无法以列表理解样式迭代es6中映射的键,因为键不是函数错误,dictionary,ecmascript-6,Dictionary,Ecmascript 6,我希望能够将javascript中的映射转换为不可变的数据结构 我在es6编写的地图中有以下结构 const features = { 'BASIC': [ 'BASIC', 'STANDARD', ], 'SUPER' : [ 'OK', 'MORE', ], } 映射的每个值都将用于初始化名为Detail的类。最后,将创建一个不可变的映射,以模拟此特性变量的结构 这是我的第一个剪辑: const data = Immutable.Map(f

我希望能够将javascript中的映射转换为不可变的数据结构

我在es6编写的地图中有以下结构

const features = {
  'BASIC': [
    'BASIC',
    'STANDARD',
  ],
  'SUPER' : [
    'OK',
    'MORE',
  ],
 }
映射的每个值都将用于初始化名为
Detail
的类。最后,将创建一个不可变的映射,以模拟此
特性
变量的结构

这是我的第一个剪辑:

const data = Immutable.Map(features.keys()(key) => {
    const details = features[key];
    return [key, new Details({details})];
  }
));
我打算使用
entries()
,因为它只在es7中可用

但是,浏览器(
chrome版本56.0.2924.87(64位)
)不喜欢这种语法,并抛出
功能。按键
不是功能

但是,我希望这个函数存在

最后,如果我使用
Object.keys
,它似乎可以工作:

const data = Immutable.Map(Object.keys(features).map(key) => {
    const details = features[key];
    return [key, new Details({details})];
  }
));
但它变得相当冗长


有什么方法可以让它更简单、更优雅吗?我希望它能以类似python的风格完成。(类似于features.items()中的k,v的
[k,v])

这可能是目前可以做到的最简单的事情。JavaScript没有类似于Python的列表理解,无论是在语言上还是在活动提议中。(,但在完成之前就被剪掉了,到目前为止还没有更新版本。)


我打算使用entries(),因为它仅在es7中可用

自从您提到使用Chrome56以来,
Object.entries()
已经可以使用了。Firefox和Safari在最新版本中也包含了它。对于其他没有它的浏览器,建议使用它

使用它,您不会保存很多字符,但可以利用迭代器参数中的解构赋值来获取
详细信息

const data = Immutable.Map(Object.entries(features)
    .map( ( [key, details] ) => [key, new Detals({details})] )
);

关于你的部分问题。。。“我希望此函数存在。”
功能
是并且不会有
映射
特定的方法。JavaScript
Map
s没有文本语法。对于对象,
keys()。(对象也将是静态的)python世界的老习惯。。。我还以为是地图呢!我想我必须使用
映射
来初始化映射对象的
特征