有没有一种简便的方法来创建一个Map?

3

以这段代码为例:

const db = new Map()
db.set('Neo4J', Neo4J.getDriver())
db.set('MongoDB', MongoDB.getDB())

有没有一种类似于地图字面量的方式来缩短这个代码呢?
2个回答

3

5
好的,这是文件中的第一行...接受一个包含键-值对元素的数组或其他可迭代对象作为参数? - undefined
好眼力,当我们需要快速行动时,阅读文档是一项很重要的技能。 - undefined
1
确实是这样的,而且我们大多数人都没有这种技能,我承认。现在你知道了 MapSet 都接受任何可迭代对象作为参数,通常意味着长度可知。不幸的是,这排除了大多数普通对象,这本来更容易用作键值对。 - undefined

2

Map构造函数接受一个可迭代对象

一个数组或其他可迭代对象,其元素是键值对(如有两个元素的数组[[ 1, 'one' ],[ 2, 'two' ]])。每个键值对都将添加到新的Map中;null值被视为undefined。

可以通过Object.entries使用对象字面量定义一个地图,该方法返回一个由键值对组成的可迭代对象:

new Map(Object.entries({
  Neo4J: Neo4J.getDriver(),
  MongoDB: MongoDB.getDB()
}));

Object.entries 是ES2017引入的新特性,它可以在ES5和ES6中通过polyfill实现。


3
请注意,只有在您不关心顺序时才会使用Object.entries - undefined
那个Bergi的本质是什么?是因为值可以被移除并扭曲顺序,还是有哪些情况下这一点很关键需要知道? - undefined
@agm1984 Bergi指的是JavaScript中对象键(Object keys)在法律上是无序的,不能依赖它们的顺序。在现代实现中,特别是支持ES6和Map的实现中,它们实际上是有序的。而通过数组构建的Map将可靠地保持有序。 - undefined
你们中的一位能否举一个例子来说明何时会受到排序影响? - undefined
当上面的代码在使用了polyfilled Map和Object.entries的旧浏览器(例如IE9)中执行时,请参考https://stackoverflow.com/questions/9942132/order-of-iteration-differs-in-ie9。 - undefined
太好了,谢谢。这非常有道理,而且我希望IE尽快停止存在。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接