Dictionary 无法以列表理解样式迭代es6中映射的键,因为键不是函数错误
我希望能够将javascript中的映射转换为不可变的数据结构 我在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
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})] )
);
关于你的部分问题。。。“我希望此函数存在。”功能
是并且不会有映射
特定的方法。JavaScriptMap
s没有文本语法。对于对象,keys()。(对象也将是静态的)python世界的老习惯。。。我还以为是地图呢!我想我必须使用映射
来初始化映射对象的特征
?