Bu cevapları ilginç insanlar hem dokundu var Object.keys()ve for...offakat bunları kombine asla:
var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
console.log(key + ':' + map[key]);
Sen sadece can for...ofbir Objectbir yineleyici değil çünkü ve for...indexya .forEach()ing Object.keys()çirkin / verimsizdir.
Çoğu insanın for...in(kontrol ile veya kontrol etmeden .hasOwnProperty()) kaçındığı için memnunum, çünkü bu da biraz dağınık, bu yüzden yukarıdaki cevabım dışında, söylemek için buradayım ...
Sıradan nesne ilişkilendirmelerini yineleyebilirsiniz! Tıpkı davranmak Mapfantezi doğrudan kullanımı ile s for...of
DEMO Chrome ve FF çalışma (ı ES6 varsayalım için)
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);
Şimimi aşağıya eklediğiniz sürece:
//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;
}};
};
Güzel sözdizimsel şekeri olmayan gerçek bir Harita nesnesi oluşturmak zorunda kalmadan.
var trueMap = new Map([['well', 'hello'], ['there', '!']]);
for (let pair of trueMap)
console.log(pair[0] + ':' + pair[1]);
Aslında, bu şim ile, hala Harita'nın diğer işlevlerinden yararlanmak istiyorsanız (hepsini daraltmadan), ancak yine de düzgün nesne gösterimini kullanmak istediyseniz, nesneler artık yinelenebilir olduğundan, şimdi sadece bir Harita oluşturabilirsiniz!
//shown in demo
var realMap = new Map({well:'hello', there:'!'});
Şim veya prototypegenel olarak karışıklıktan hoşlanmayanlar için , işlevi pencerede yapmaktan çekinmeyin, bunun yerine o getObjIterator()zamanki gibi bir şey çağırın ;
//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;
}
Şimdi bunu sıradan bir işlev olarak adlandırabilirsiniz, başka hiçbir şey etkilenmez
var realMap = new Map(getObjIterator({well:'hello', there:'!'}))
veya
for (let pair of getObjIterator(ordinaryObject))
Bunun işe yaramamasının bir nedeni yok.
Geleceğe Hoşgeldiniz.