2013-07-25 4 views
1

я получил для в петле в JavaScript, но я заинтересован только в ключахАльтернатива для «ибо» -loop

for(var key in { foo:0, bar:0, blah:0 }) { 
    /* do sth. with the key */ 

} 

Это работает, но это выглядит немного глупо. Firefox предлагает цикл for-loop. К сожалению, он не работает во всех браузерах. Я также тестировал его в Opera 11, и он там не работает.

// only firefox 
for(var key of ["foo", "bar", "blah"]) { 
    /* do sth. with the key */ 

} 

Есть ли более разумный способ решить эту проблему для каждого браузера?

ответ

2

В ничего, кроме старого IE (IE8 и старше), вы можете сделать это:

["foo","bar","blah"].forEach(function(key) { 
    // do something 
}); 

Чтобы добавить поддержку в некоторых версиях IE (я думаю, IE7 и 8 позволяют это, IE6 нет):

if(![].forEach) { 
    Array.prototype.forEach = function(callback) { 
     for(var i=0, l=this.length; i<l; i++) callback(this[i]); 
    }; 
} 
+0

+1 Я думаю, вы можете прототипировать его на Array, чтобы добавить поддержку IE 8, если нужно :-) – TGH

3

Попробуйте использовать Object.keys, что позволит вам получить только ту часть.

Вы можете прочитать больше о здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

(Помните, все ассоциативные массивы в JavaScript являются объектами)

Имейте в виду, поддерживается только в IE> = 9

Смежные вопросы