【发布时间】:2017-09-04 20:48:01
【问题描述】:
以这段代码为例:
const db = new Map()
db.set('Neo4J', Neo4J.getDriver())
db.set('MongoDB', MongoDB.getDB())
有没有办法像某种地图文字一样缩短它?
【问题讨论】:
标签: javascript dictionary ecmascript-6
以这段代码为例:
const db = new Map()
db.set('Neo4J', Neo4J.getDriver())
db.set('MongoDB', MongoDB.getDB())
有没有办法像某种地图文字一样缩短它?
【问题讨论】:
标签: javascript dictionary ecmascript-6
Map构造函数accepts an iterable:
一个数组或其他可迭代对象,其元素是键值对(具有两个元素的数组,例如 [[ 1, 'one' ],[ 2, 'two' ]])。每个键值对都被添加到新的 Map 中; null 值被视为未定义。
可以通过Object.entries 使用对象字面量定义映射,该对象字面量返回由键值对组成的可迭代对象:
new Map(Object.entries({
Neo4J: Neo4J.getDriver(),
MongoDB: MongoDB.getDB()
}));
Object.entries 是 ES2017,它在 ES5 和 ES6 中是 polyfillable。
【讨论】:
Object.entries。
我想我找到了答案。这似乎完美无缺:
const db = new Map([
['Neo4J', Neo4J.getDriver()],
['MongoDB', MongoDB.getDB()]
])
需要这个的原因是我的数据库连接驱动程序由于某些包含函数作为值的键而爆炸。
地图可以很好地处理这个问题:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map
【讨论】:
Map 和Set 都接受任何可迭代的,通常意味着任何有长度的东西,作为参数。不幸的是,这排除了大多数常规对象,它们更容易用作键->值对