如何将普通对象转换为ES6映射
How to convert a plain object into an ES6 Map?
由于某种原因,我在MDN文档中找不到这个简单的东西(也许我只是缺少它)。
我本以为这会奏效:
const map = new Map({foo: 'bar'});
map.get('foo'); // 'bar'
但是第一行抛出TypeError: (var)[Symbol.iterator] is not a function
如何从普通对象制作贴图?我真的必须先把它转换成键值对数组吗?
是的,Map
构造函数接受一个键值对数组。
Object.entries
是ES2017(19.1.2.5)中提供的一种新的对象静态方法
const map = new Map(Object.entries({foo: 'bar'}));
map.get('foo'); // 'bar'
它目前在Firefox 46+和Edge 14+以及Chrome 的更新版本中实现
如果您需要支持较旧的环境,并且无法选择转换,请使用polyfill,例如georg:推荐的polyfill
Object.entries = typeof Object.entries === 'function' ? Object.entries : obj => Object.keys(obj).map(k => [k, obj[k]]);
我真的必须先把它转换成键值对数组吗?
不,一个键值对数组的迭代器就足够了。您可以使用以下方法来避免创建中间数组:
function* entries(obj) {
for (let key in obj)
yield [key, obj[key]];
}
const map = new Map(entries({foo: 'bar'}));
map.get('foo'); // 'bar'
将对象转换为地图
new Map()
构造函数接受entries
的可迭代项。使用Object.entries
,您可以轻松地从Object
转换为Map
:const obj = { foo: 'bar', baz: 42 }; const map = new Map(Object.entries(obj)); console.log(map); // Map { foo: "bar", baz: 42 }
ES6
将对象转换为地图:
const objToMap = (o) => new Map(Object.entries(o));
将地图转换为对象:
const mapToObj = (m) => [...m].reduce( (o,v)=>{ o[v[0]] = v[1]; return o; },{} )
注意:mapToObj函数假定映射键是字符串(否则将失败)
const myMap = new Map(
Object
.keys(myObj)
.map(
key => [key, myObj[key]]
)
)
或者,您可以使用lodash-toPairs方法:
const _ = require('lodash');
const map = new Map(_.toPairs({foo: 'bar'}));
相关文章:
- 如何将es6导入转换为AMD需要
- 有没有办法将包含 es6 的字符串转换为 es5
- 使用 Babel 将 ES6 模块转换为 ES5 AMD 模块,无法按预期工作
- 如何将普通对象转换为ES6映射
- 为什么我需要的库没有从ES6转换到ES5
- 将 ES6 可迭代转换为数组
- React js getInitialState 在转换为 es6 后不起作用
- 将 jQuery 插件转换为 es6 模块
- 使用 babel 将 es6 转换为 es5,然后与 Browserify 捆绑
- ES6中的JavaScript作用域已转换
- 正在转换为ES6语法
- Array.prototype.values()未定义-使用Babel在NodeJS环境中转换ES6
- 将Singleton JS对象转换为使用ES6类
- 无法在JavaScript ES6中将对象强制转换为类
- 将封口转换为es6模块
- 将ReactClass转换为ReactComponent ES6
- 默认情况下,BabelJS不会't可转换ES6语法的匿名函数
- 将带有符号的ES6类转换为JSON
- 这是ES6中代码的转换
- React ES6类转换不工作