在Node.js REPL中:
> var map = new Map();
undefined
> map['foo'] = 'bar';
'bar'
> map['bar'] = 'baz';
'baz'
> map
Map { foo: 'bar', bar: 'baz' }
> map.forEach(console.log);
undefined
字符串
正如你所看到的,foo
和bar
键在map
中有明确的定义,但是当我尝试用Map.prototype.forEach
遍历它们时,什么也没有发生-但是根据MDN,它应该发生。还要注意的是,Map.prototype.forEach
* 是定义的 *,所以不仅仅是这个方法还没有实现。我还尝试使用了for ... of ...
循环,结果是一样的--我提供给每次迭代运行的代码实际上并没有运行,尽管它应该运行。
我在Node.js v4.4.4上。我在网上搜索“JavaScript map不是可迭代节点”之类的,没有运气。
这是怎么回事?
5条答案
按热度按时间gmol16391#
不是100%肯定,但我认为你需要使用
map.set
与Maps
。字符串
这将注销您正在查找的每个项目。因为
Map.prototype.forEach
正在查找可迭代属性,所以您需要使用set()
函数来设置这些可迭代属性。fwzugrvs2#
Map
是一种抽象数据类型。将Map
构造函数与new
一起应用当然会创建一个普通对象。但Map
本身在其API(Map.prototype.get/set/has/clear
等)后面被抽象:字符串
请注意,这实际上是新Map类型的好处:它分隔data from the program level。
von4xj4u3#
我们可以使用for(){...}运算符来执行6 Map
字符串
导致
型
nbnkbykc4#
如果我们想使用**.map()迭代器,我们可以对Maps使用一个简单的技巧,因为Maps没有map()这样的操作。Dr. Axel Rauschmayer的方法是: 将map转换为[key,value]对的数组。 Map或过滤数组。* 将结果转换回map。
范例:
字符串
导致
型
j1dl9f465#
对于任何试图将React式Map<>属性(在Vue.js中)转换为数组的人,请使用Array.from()。React式属性不会“按原样”Map:
字符串