これは、これらの答えの人々が、両方に触れている面白いObject.keys()
とfor...of
が、それらを組み合わせることはありません。
var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
console.log(key + ':' + map[key]);
あなたはできるだけでなく、それはイテレータではない、とするのでまたはINGの醜い/非効率的です。
これは少し面倒なので、ほとんどの人が(チェックの有無にかかわらず)遠慮しているので、上記の私の回答以外に、私はここで...for...of
Object
for...index
.forEach()
Object.keys()
for...in
.hasOwnProperty()
通常のオブジェクトの関連付けを繰り返すことができます!Map
for...of
ChromeとFFで動作するファンシーな
デモを直接使用して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]);
実際、このシムを使用して、(他の機能をすべて詰め込むことなく)マップの他の機能を利用したいが、きちんとしたオブジェクト表記を使用したい場合は、オブジェクトが反復可能であるため、そこからマップを作成できます!
//shown in demo
var realMap = new Map({well:'hello', there:'!'});
シムを作成したくない、またはprototype
一般的に混乱したくない場合は、代わりにwindowで関数を作成して、そのようなものを呼び出してください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))
それがうまくいかない理由はありません。
未来へようこそ。