Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';我是否迭代ES6映射的属性?_Javascript_Node.js_Dictionary_Ecmascript 6 - Fatal编程技术网

Javascript 为什么可以';我是否迭代ES6映射的属性?

Javascript 为什么可以';我是否迭代ES6映射的属性?,javascript,node.js,dictionary,ecmascript-6,Javascript,Node.js,Dictionary,Ecmascript 6,在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.forE

在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
对它们进行迭代时,什么都没有发生-但是。还要注意,
Map.prototype.forEach
是定义的,所以这不仅仅是因为这个方法还没有实现。我也试着用
来。。。对于…
loop,结果是一样的——我提供给每个迭代运行的代码实际上并没有运行,尽管如此

我在Node.jsv4.4.4上。我在网上搜索了“javascript映射不是可移植节点”之类的东西,但运气不好


这是怎么回事?

不是100%阳性,但我认为您需要使用
map。使用
map设置

var map = new Map();
map.set('foo', 'bar');
map.set('bar', 'baz');
map.forEach(console.log);

这将注销您正在查找的每个项目。由于
Map.prototype.forEach
正在查找可移植属性,因此需要使用
set()
函数来设置这些可移植属性。

不是100%正,但我认为需要使用
Map.set
Map

var map = new Map();
map.set('foo', 'bar');
map.set('bar', 'baz');
map.forEach(console.log);

这将注销您正在查找的每个项目。由于
Map.prototype.forEach
正在查找可移植属性,因此需要使用
set()
函数来设置这些可移植属性。

Map
是一种抽象数据类型。使用
new
应用
Map
构造函数当然会创建一个普通对象。但是
Map
本身被抽象在它的API后面(
Map.prototype.get/set/has/clear
等):

const map=newmap([[“key1”,1],“key2”,2]]);
//可以修改贴图对象:
映射[“foo”]=“bar”;
map.bar=“baz”;
控制台日志(map);
//但您需要使用Map API来改变地图本身:
地图集(“键3”,3);

map.forEach(console.log.bind(console))
Map
是一种抽象数据类型。使用
new
应用
Map
构造函数当然会创建一个普通对象。但是
Map
本身被抽象在它的API后面(
Map.prototype.get/set/has/clear
等):

const map=newmap([[“key1”,1],“key2”,2]]);
//可以修改贴图对象:
映射[“foo”]=“bar”;
map.bar=“baz”;
控制台日志(map);
//但您需要使用Map API来改变地图本身:
地图集(“键3”,3);
map.forEach(console.log.bind(console))我们可以使用for(){…}操作符来迭代ES6映射

let map0 = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3]
]);

let map1 = new Map();
for (let [key, value] of myMap) {
    map1.set('_' + k, v * 2);    
}
导致

{'_a' => 2, '_b' => 4, '_c' => 6}
{'_a' => 2, '_b' => 4, '_c' => 6}
我们可以使用for(){…}操作符来迭代ES6映射

let map0 = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3]
]);

let map1 = new Map();
for (let [key, value] of myMap) {
    map1.set('_' + k, v * 2);    
}
导致

{'_a' => 2, '_b' => 4, '_c' => 6}
{'_a' => 2, '_b' => 4, '_c' => 6}

如果我们想使用.map()迭代器,我们可以对映射使用一个简单的技巧,因为映射没有像map()这样的操作。 这一方法是: *将映射转换为[key,value]对数组。 *映射或过滤数组。 *将结果转换回地图

例如:

let map0 = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3]
]);

const map1 = new Map(
  [...map0]
  .map(([k, v]) => ['_' + k, v * 2 ])
);
导致

{'_a' => 2, '_b' => 4, '_c' => 6}
{'_a' => 2, '_b' => 4, '_c' => 6}

如果我们想使用.map()迭代器,我们可以对映射使用一个简单的技巧,因为映射没有像map()这样的操作。 这一方法是: *将映射转换为[key,value]对数组。 *映射或过滤数组。 *将结果转换回地图

例如:

let map0 = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3]
]);

const map1 = new Map(
  [...map0]
  .map(([k, v]) => ['_' + k, v * 2 ])
);
导致

{'_a' => 2, '_b' => 4, '_c' => 6}
{'_a' => 2, '_b' => 4, '_c' => 6}

到底是什么?这是有效的(只要我被允许,我会尽快接受你的答案),但我无法想象为什么会这样——或者,就这一点而言,为什么
map[key]
语法看起来“有效”,但实际上并非如此,以如此令人困惑的方式。无论如何,谢谢!哦,我明白了。这是因为我在地图上设置了一个属性,而
Map.set
在地图内设置了一个键。。。如果这有意义的话。因为地图是一个
对象
,所以你可以在地图上打上你想要的任何属性。就像您可以说
[].foo=“bar”
一样,要将冲压属性隐藏到数组中,您也可以对映射或函数执行相同的操作。因此,当您尝试这样做时,它不会出错。但是,映射使用ES6中的
迭代器
功能,这意味着您需要使用
.set()
来设置值,而不是使用点符号或括号符号来设置值。这就是地图的工作原理。到底是什么?这是有效的(只要我被允许,我会尽快接受你的答案),但我无法想象为什么会这样——或者,就这一点而言,为什么
map[key]
语法看起来“有效”,但实际上并非如此,以如此令人困惑的方式。无论如何,谢谢!哦,我明白了。这是因为我在地图上设置了一个属性,而
Map.set
在地图内设置了一个键。。。如果这有意义的话。因为地图是一个
对象
,所以你可以在地图上打上你想要的任何属性。就像您可以说
[].foo=“bar”
一样,要将冲压属性隐藏到数组中,您也可以对映射或函数执行相同的操作。因此,当您尝试这样做时,它不会出错。但是,映射使用ES6中的
迭代器
功能,这意味着您需要使用
.set()
来设置值,而不是使用点符号或括号符号来设置值。这就是贴图的工作方式。
Map
对象没有属性,它们有条目。使用
newmap([['foo','bar',['bar','baz']])创建它。
Map
对象没有属性,它们有条目。使用
newmap([['foo',bar',['bar',baz']])创建它。