Итерация массива Javascript с использованием for..in с включенным MooTools
-
19-09-2019 - |
Вопрос
Я перебираю массив в MooTools, но вижу дополнительные элементы при переборе массива с использованием сокращения for..in
петля.Он работает нормально, когда я использую обычный for
петля.Это проблема с MooTools, загрязняющим глобальное пространство имен, или я делаю что-то не так?
Eсть createTabs()
функция, которая перебирает массив и создает табуляцию для каждого значения в массиве:
function createTabs() {
var myTabs = [["First", "a.png"], ["Second", "b.png"]];
for(var i in myTabs) {
var tab = new Tab(myTabs[i][0], myTabs[i][1]);
console.log(i);
}
}
Это результат console.log(i)
:
0
1
$family
each
clean
associate
link
contains
extend
getLast
getRandom
include
combine
erase
empty
flatten
hexToRgb
rgbToHex
toJSON
Первые 2 индекса я понимаю, а остальные откуда?
Редактировать:Спасибо за быстрые ответы, Четан и К Прайм.Это имеет смысл, и Array.each
дополнение от MooTools — гораздо более чистый способ итерации!
Теперь выглядит намного лучше:
myTabs.each(function(item) {
var tab = new Tab(item[0], item[1]);
console.log(item);
});
Решение
for..in
не предназначен для итерации массива.Он перебирает все свойства объекта, которые не являются встроенными.Поскольку MooTools добавил в прототип Array больше функций, они теперь также являются свойствами массива.Видеть это https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Statements/For...in
Просто используйте базовый цикл for для итерации массива.
Другие советы
Как отметил Четан, for .. in
предназначен для итерации свойств объекта, а не массивов.однако вы можете перебирать текущие элементы (а не унаследованные элементы, установленные MooTools), используя hasOwnProprty
, вот так:
for (i in array)
if (array.hasOwnProperty(i))
{
//.. do stuff ...
}
Орр, еще лучше, поскольку вы используете MooTools, просто используйте Array.each
метод:
array.each (function (item, index)
{
// ... do stuff ...
});