Как сделать так, чтобы расширенный цикл for только смотрел на фактическое содержимое массива - PullRequest
0 голосов
/ 23 февраля 2011
this.someArray = [1,2,3,4,5]
for(var i in this.someArray){console.log(this.someArray[i]);}

Он не только проходит по элементам массива, но также является ненужным, как 'remove'. Я не хочу отказываться от расширенного цикла и использовать обычный цикл (так как это неудобно). Есть ли способ зацикливаться только на содержимом массива?

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

Ваш цикл перехватывает методы и свойства Array.prototype в дополнение к содержимому массива.Как сказал JCOC611, обычно лучше проходить по массивам «правильным» способом, но если вы не хотите этого делать, вы можете использовать функцию массива hasOwnProperty, чтобы проверить, действительно ли свойство находится в массиве или еслион является частью Array.prototype:

this.someArray = [1, 2, 3, 4, 5];
for (var i in this.someArray) {
    if (this.someArray.hasOwnProperty(i)) {
        console.log(this.someArray[i]);
    }
}

См. этот вопрос для получения более подробной информации: Почему использование «for ... in» с итерацией массива - плохая идея?

Кроме того, этот пост содержит много информации: http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/

2 голосов
/ 23 февраля 2011

Для массива, вероятно, целесообразно использовать старомодный цикл for с индексом, особенно если вам все равно часто нужно знать, что такое индекс.

Однако, чтобы избежать появления унаследованных свойств при циклическом просмотре свойств любого объекта, вы можете использовать функцию hasOwnProperty:

for (var prop in someObject){
   if (someObject.hasOwnProperty(prop) {
         console.log(someObject[prop]);
   }
}
2 голосов
/ 23 февраля 2011

Никогда не проходить через такой массив, сделайте так:

for(var i=0;i<this.someArray.length;i++){...}

«Я не хочу отказываться от расширенного цикла и использовать обычный цикл (так как это неудобно)»

Извините, но, насколько я знаю, это правильный способ перебрать массив ...

0 голосов
/ 23 февраля 2011

У вас также есть Ext.each, который иногда может быть полезен.

Ext.each(myArray, console.log);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...