これらの回答の興味深い人々は両方に触れましたが、それらを組み合わせることはObject.keys()
ありませんでした:for...of
var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
console.log(key + ':' + map[key]);
イテレータではないためだけではできませんfor...of
。また、ingは醜い/非効率的です。ほとんどの人が(チェックの有無にかかわらず)
を控えていることをうれしく思います.Object
for...index
.forEach()
Object.keys()
for...in
.hasOwnProperty()
通常のオブジェクトの関連付けを繰り返すことができます! Map
for...of
Chrome と FF で動作する派手なDEMOを直接使用して s と同じように動作します(ES6 のみを想定しています)。
var ordinaryObject = {well:'hello', there:'!'};
for (let pair of ordinaryObject)
//key:value
console.log(pair[0] + ':' + pair[1]);
//or
for (let [key, value] of ordinaryObject)
console.log(key + ':' + value);
以下に私のシムを含める限り:
//makes all objects iterable just like Maps!!! YAY
//iterates over Object.keys() (which already ignores prototype chain for us)
Object.prototype[Symbol.iterator] = function() {
var keys = Object.keys(this)[Symbol.iterator]();
var obj = this;
var output;
return {next:function() {
if (!(output = keys.next()).done)
output.value = [output.value, obj[output.value]];
return output;
}};
};
優れたシンタックス シュガーを持たない実際の Map オブジェクトを作成する必要はありません。
var trueMap = new Map([['well', 'hello'], ['there', '!']]);
for (let pair of trueMap)
console.log(pair[0] + ':' + pair[1]);
実際、この shim を使用すると、Map の他の機能を (それらをすべて shimming せずに) 利用したいが、きちんとしたオブジェクト表記法を使用したい場合は、オブジェクトが反復可能になったため、それから Map を作成できます!
//shown in demo
var realMap = new Map({well:'hello', there:'!'});
shim を好まない、または一般的にいじるのが好きでない人は、関数を window で自由に作成して、 thenprototype
のように呼び出してください。getObjIterator()
//no prototype manipulation
function getObjIterator(obj) {
//create a dummy object instead of adding functionality to all objects
var iterator = new Object();
//give it what the shim does but as its own local property
iterator[Symbol.iterator] = function() {
var keys = Object.keys(obj)[Symbol.iterator]();
var output;
return {next:function() {
if (!(output = keys.next()).done)
output.value = [output.value, obj[output.value]];
return output;
}};
};
return iterator;
}
これで、通常の関数として呼び出すことができます。他に影響はありません
var realMap = new Map(getObjIterator({well:'hello', there:'!'}))
また
for (let pair of getObjIterator(ordinaryObject))
それがうまくいかない理由はありません。
未来へようこそ。