Hvorfor iterer min for for-each-loop ikke over mit JavaScript-associerede arrayobjekt?
// defining an array
var array = [];
// assigning values to corresponding keys
array["Main"] = "Main page";
array["Guide"] = "Guide page";
array["Articles"] = "Articles page";
array["Forum"] = "Forum board";
// expected: loop over every item,
// yet it logs only "last" assigned value - "Forum"
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
EDIT: jQuery each()
kunne være nyttigt: https://api.jquery.com/jQuery.each/
Egenskaben .length
registrerer kun egenskaber med numeriske indekser (nøgler). Du bruger strenge som nøgler.
Du kan gøre dette:
var arr_jq_TabContents = {}; // no need for an array
arr_jq_TabContents["Main"] = jq_TabContents_Main;
arr_jq_TabContents["Guide"] = jq_TabContents_Guide;
arr_jq_TabContents["Articles"] = jq_TabContents_Articles;
arr_jq_TabContents["Forum"] = jq_TabContents_Forum;
for (var key in arr_jq_TabContents) {
console.log(arr_jq_TabContents[key]);
}
For at være sikker er det en god idé at sikre sig, at ingen af egenskaberne er uventede resultater af arv i sløjfer som denne:
for (var key in arr_jq_TabContents) {
if (arr_jq_TabContents.hasOwnProperty(key))
console.log(arr_jq_TabContents[key]);
}
redigér &;mdash; det'er nok en god idé nu at bemærke, at funktionen Object.keys()
er tilgængelig på moderne browsere og i Node osv. Den funktion returnerer "egne" nøgler af et objekt, som et array:
Object.keys(arr_jq_TabContents).forEach(function(key, index) {
console.log(this[key]);
}, arr_jq_TabContents);
Callback-funktionen, der er overgivet til .forEach()
, kaldes med hver nøgle og nøglen's indeks i det array, der returneres af Object.keys()
. Den får også overdraget det array, som funktionen itererer gennem, men dette array er ikke rigtig brugbart for os; vi har brug for det oprindelige objekt. Det kan tilgås direkte ved navn, men (efter min mening) er det lidt pænere at overdrage det eksplicit, hvilket gøres ved at overdrage et andet argument til .forEach()
— det oprindelige objekt — som vil blive bundet som this
inde i callbacken. (Jeg så lige, at dette blev bemærket i en kommentar nedenfor.)
Dette er en meget enkel fremgangsmåde. Fordelen er, at du også kan få nøgler:
for (var key in array) {
var value = array[key];
console.log(key, value);
}
For ES6:
array.forEach(value => {
console.log(value)
})
For ES6: (Hvis du vil have værdi, indeks og selve arrayet)
array.forEach((value, index, self) => {
console.log(value, index, self)
})