Mat*_*s M 50 javascript dictionary
我想迭代地图的所有值.我知道可以迭代所有键.但是可以直接迭代值吗?
var map = { key1 : 'value1', key2 : 'value2' }
for (var key in map) { ...} // iterates over keys
Run Code Online (Sandbox Code Playgroud)
And*_*lla 51
这不是地图.这只是一个Object.
编辑: 正如阿米特在评论中所指出的,下面的代码比OP更差.
您可以通过实际迭代键来"迭代值" :
var value;
Object.keys(map).forEach(function(key) {
value = map[key];
console.log(value);
});
Run Code Online (Sandbox Code Playgroud)
Par*_*hav 12
我这样迭代,它对我有用。
for (let [k, v] of myMap) {
console.log("Key: " + k);
console.log("Value: " + v);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
从某种意义上说,我认为你打算在ES5或ES2015中,不,不是没有你的工作.
在ES2016中,可能与object.values.
请注意,JavaScript中的数组实际上是从整数到值的映射,JavaScript数组中的值可以直接枚举.
['foo', 'bar'].forEach(v => console.log(v)); // foo bar
Run Code Online (Sandbox Code Playgroud)
此外,在ES2015中,您可以通过在名称为的属性上放置函数来使对象可迭代Symbol.iterator:
var obj = {
foo: '1',
bar: '2',
bam: '3',
bat: '4',
};
obj[Symbol.iterator] = iter.bind(null, obj);
function* iter(o) {
var keys = Object.keys(o);
for (var i=0; i<keys.length; i++) {
yield o[keys[i]];
}
}
for(var v of obj) { console.log(v); } // '1', '2', '3', '4'
Run Code Online (Sandbox Code Playgroud)
另外,根据其他答案,还有其他内置函数可以提供您想要的功能,例如Map(但不是 WeakMap因为它不可迭代),Set例如(但这些并不存在于所有浏览器中).
引入的 EcmaScript 2017Object.entries允许您迭代值和键。文档
var map = { key1 : 'value1', key2 : 'value2' }
for (let [key, value] of Object.entries(map)) {
console.log(`${key}: ${value}`);
}
Run Code Online (Sandbox Code Playgroud)
结果将是:
键 1
:值1 键2:值 2