JavaScript matrice iterazione usando for..in con MooTools incluse
-
19-09-2019 - |
Domanda
Io sono l'iterazione di un array in MooTools ma vedendo elementi aggiuntivi quando l'iterazione attraverso l'array utilizzando il ciclo for..in
stenografia. Funziona bene quando uso il ciclo for
regolare. È questo un problema con MooTools inquinare il namespace globale o sto facendo qualcosa di sbagliato qui?
C'è una funzione createTabs()
che scorre su un array e crea una scheda per ogni valore nella matrice:
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);
}
}
Questa è l'uscita di console.log(i)
:
0
1
$family
each
clean
associate
link
contains
extend
getLast
getRandom
include
combine
erase
empty
flatten
hexToRgb
rgbToHex
toJSON
Capisco le prime 2 indici, ma dov'è il resto viene?
Modifica : Grazie per le risposte veloci e Chetan k Prime. Questo ha un senso, e l'aggiunta Array.each
da MooTools è modo molto più pulito per iterare!
sembra molto meglio ora:
myTabs.each(function(item) {
var tab = new Tab(item[0], item[1]);
console.log(item);
});
Soluzione
for..in
non è destinata a matrice iterazione. Si itera su tutte le proprietà di un oggetto che non sono built-in. Poiché MooTools ha aggiunto più funzioni prototipo Array, ora sono proprietà degli array pure. Vedere questo https://developer.mozilla.org/En/Core_JavaScript_1 .5_Reference / dichiarazioni / Per ... in
Basta usare una base ciclo per matrice di iterazione.
Altri suggerimenti
Come Chetan sottolineato, for .. in
è destinata proprietà dell'oggetto iterazione, non array. tuttavia, è possibile scorrere i membri attuali (e non i membri ereditati fissati dal MooTools), utilizzando hasOwnProprty
, in questo modo:
for (i in array)
if (array.hasOwnProperty(i))
{
//.. do stuff ...
}
Orr, meglio ancora, dal momento che si sta utilizzando MooTools, basta usare il metodo Array.each
:
array.each (function (item, index)
{
// ... do stuff ...
});