由于某种原因,我无法在MDN文档中找到这个简单的东西(也许我只是想念它)。
我希望这可以工作:
const map = new Map({foo: 'bar'}); map.get('foo'); // 'bar'
…但是第一行抛出 TypeError: (var)[Symbol.iterator] is not a function
TypeError: (var)[Symbol.iterator] is not a function
如何从普通对象制作地图?我真的必须首先将其转换为键值对数组的数组吗?
是的,Map构造函数采用键值对数组。
Map
Object.entries是ES2017(19.1.2.5)中可用的新的Object静态方法。
Object.entries
const map = new Map(Object.entries({foo: 'bar'})); map.get('foo'); // 'bar'
如果您需要支持较旧的环境,并且不适合使用Transpilation,请使用polyfill,例如georg建议的方法:
Object.entries = typeof Object.entries === 'function' ? Object.entries : obj => Object.keys(obj).map(k => [k, obj[k]]);