-
Måste man veta hur lång arrayen ska vara när man skapar den, eller kan man lägga till fler index efter hand?
-
Måste index vara heltal, eller kan man indexera med bokstäver?
-
Hur ser en multidimensionell array ut i JS? Hur definieras den?
Arrayer
12 svar · 325 visningar · startad av aasah
- Du behöver inte veta dess storlek
- Nej, s.k. associativa arrayer finns också:
var arr = [];
arr["uno"] = 1;
arr["dos"] = "2";
arr["tres"] = new Number(3);
- Några exempel:
var arr = [["a","b","c"],["d","e","f"]];
// arr[0][0] = "a"
// arr[0][2] = "c"
// arr[1][1] = "e"
// eller
var k = new Array();
for (var i = 0; i < 10; ++i){
k[i] = new Array();
}
:)
Toppen! :e Tack!
Hmmm, var ska detta definieras? :q
Följande genererar fel. "startPosJSarr[...]indexDown är null " någonting... Se bifogad bild. (Färgen är gif:s fel, men det går att läsa...)
<script type="text/javascript">
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
//Funkar inte heller
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
function markWord(row, col) {
var ruta = document.getElementById("wordBoxHeader");
var ix = row + col;
var posD = document.getElementById("wordBoxDownPos");
var posA = document.getElementById("wordBoxAcrossPos");
var inpOrdD = document.getElementById("wordBoxDownWord");
var subD = document.getElementById("wordBoxDownSubmit");
var inpOrdA = document.getElementById("wordBoxAcrossWord");
var subA = document.getElementById("wordBoxAcrossSubmit");
ruta.innerText = row + " " + col;
//posD.innerText = ix + " down";
posD.innerText = startPosJSarr[ix]["indexDown"]; //Fel även för def index
posA.innerText = startPosJSarr[ix]["indexAcross"]; //dito
if (posD.innerText != "-") {
inpOrdD.disabled = false;
subD.disabled = false;
}
else {
inpOrdD.disabled = true;
subD.disabled = true;
}
if (posA.innerText != "-") {
inpOrdA.disabled = false;
subA.disabled = false;
}
else {
inpOrdA.disabled = true;
subA.disabled = true;
}
}
</script>
Däremot funkar följande:
<script type="text/javascript">
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
/*
//Funkar inte heller
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
*/
function markWord(row, col) {
var ruta = document.getElementById("wordBoxHeader");
var ix = row + col;
var posD = document.getElementById("wordBoxDownPos");
var posA = document.getElementById("wordBoxAcrossPos");
var inpOrdD = document.getElementById("wordBoxDownWord");
var subD = document.getElementById("wordBoxDownSubmit");
var inpOrdA = document.getElementById("wordBoxAcrossWord");
var subA = document.getElementById("wordBoxAcrossSubmit");
ruta.innerText = row + " " + col;
posD.innerText = ix + " down"; //OK
//posD.innerText = startPosJSarr[ix]["indexDown"];
//posA.innerText = startPosJSarr[ix]["indexAcross"];
if (posD.innerText != "-") {
inpOrdD.disabled = false;
subD.disabled = false;
}
else {
inpOrdD.disabled = true;
subD.disabled = true;
}
if (posA.innerText != "-") {
inpOrdA.disabled = false;
subA.disabled = false;
}
else {
inpOrdA.disabled = true;
subA.disabled = true;
}
}
</script>
Alltså är det arrayen som strular.
("heller" ovan kommer ifrån att jag naturligtvis inte vill hårdkoda innehållet eg. Det här är bara ett sätt att fatta hur det funkar - eller inte funkar... :( ;))
Testa
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
//Funkar förhoppningsvis nu
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["C1"] = new Array();
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
Ja, det funkar. :)
Men... hur kollar jag då om new Array() är gjort eller ej? För när värdena inte hårdkodas kommer ett visst index' down-värden att fyllas oberoende av across-värdena. Vissa positioner startar nya ord både across och down, andra positioner har bara ettdera. Så om
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
detta redan gjorts kan jag ju inte göra
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
utan att tappa den första informationen. Och om inget across lagts in på den positionen måste jag göra new Array() först. Hur lösa?
- Måste arrayen fyllas med värden i HEAD, eller kan det göras i BODY? Ser en funktion i HEAD, globala variabler i BODY-delen, eller bara sådant som definierats ovanför?
if (typeof startPosJSarr["A1"] == "undefined"){
// startPosJSarr["A1"] = new Array(); kan inte ha gjorts
}
- Arrayen kan du fylla var helst det passar. Globala variabler är inte kopplade till någon del i HTML-koden.
Tackar! :D
OK, vad är det jag inte ser? Jag tycker §jr att alla positiner jag kan trycka i är definierade och att startpositionen för ett ord borde uppenbara sig i Pos när man trycker på valfri vit ruta. Det tycker tydligen inte JS... :p
Jag får samma felmeddelande som bifogats ovan. Om ni vill kika på sidan, så är den här.
Det jag vill ska hända är att om jag trycker i valfri vit ruta så ska information komma upp i wordBox-rutan om det eller de ord som rutan ingår i.
I HEAD
<script type="text/javascript">
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
function markWord(row, col) {
var ruta = document.getElementById("wordBoxHeader");
var ixLB = row + col;
var ixSPA = startPosJSarr[ixLB]["startAcross"];
var ixSPD = startPosJSarr[ixLB]["startDown"];
var posA = document.getElementById("wordBoxAcrossPos");
var inpOrdA = document.getElementById("wordBoxAcrossWord");
var subA = document.getElementById("wordBoxAcrossSubmit");
var posD = document.getElementById("wordBoxDownPos");
var inpOrdD = document.getElementById("wordBoxDownWord");
var subD = document.getElementById("wordBoxDownSubmit");
ruta.innerText = row + " " + col;
posA.innerText = startPosJSarr[ixSPA]["indexAcross"];
posD.innerText = startPosJSarr[ixSPD]["indexDown"];
if (posA.innerText != "-") {
inpOrdA.disabled = false;
subA.disabled = false;
}
else {
inpOrdA.disabled = true;
subA.disabled = true;
}
if (posD.innerText != "-") {
inpOrdD.disabled = false;
subD.disabled = false;
}
else {
inpOrdD.disabled = true;
subD.disabled = true;
}
}
</script>
I BODY definieras följande:
<table><tr><td class="index"> </td><td class="index">1</td><td class="index">2</td><td class="index">3</td><td class="index">4</td></tr><tr><td class="index">A</td><td class="vit" onclick="markWord('A', 1);">
<input type="hidden" name="A 1" size=1 value=""> </td><td class="vit" onclick="markWord('A', 2);">
<input type="hidden" name="A 2" size=1 value=""> </td><td class="vit" onclick="markWord('A', 3);">
<input type="hidden" name="A 3" size=1 value=""> </td><td class="vit" onclick="markWord('A', 4);">
<input type="hidden" name="A 4" size=1 value=""> </td></tr><tr><td class="index">B</td><td class="vit" onclick="markWord('B', 1);">
<input type="hidden" name="B 1" size=1 value=""> </td><td class="svart"> </td><td class="vit" onclick="markWord('B', 3);">
<input type="hidden" name="B 3" size=1 value=""> </td><td class="svart"> </td></tr><tr><td class="index">C</td><td class="vit" onclick="markWord('C', 1);">
<input type="hidden" name="C 1" size=1 value=""> </td><td class="vit" onclick="markWord('C', 2);">
<input type="hidden" name="C 2" size=1 value=""> </td><td class="vit" onclick="markWord('C', 3);">
<input type="hidden" name="C 3" size=1 value=""> </td><td class="vit" onclick="markWord('C', 4);">
<input type="hidden" name="C 4" size=1 value=""> </td></tr><tr><td class="index">D</td><td class="vit" onclick="markWord('D', 1);">
<input type="hidden" name="D 1" size=1 value=""> </td><td class="svart"> </td><td class="svart"> </td><td class="svart"> </td></tr></table><BR><BR><form><form>
<table><tr><td id=\"wordBoxHeader\" colspan=\"3\"><center>You clicked on:</center></td></tr>
<tr><th>Pos</th><th>The Word</th><th>Direction</th></tr>
<tr><td id=\"wordBoxAcrossPos\">-</td>
<td><input type=\"text\" id=\"wordBoxAcrossWord\" disabled></td>
<td><input type=\"submit\" id=\"wordBoxAcrossSubmit\" value=\"Add Across!\" disabled></tr>
<tr><td id=\"wordBoxDownPos\">-</td>
<td><input type=\"text\" id=\"wordBoxDownWord\" disabled></td>
<td><input type=\"submit\" id=\"wordBoxDownSubmit\" value=\"Add Down!\" disabled></tr>
</table><BR><BR>
<script type=\"text/javascript\">
letterBoxJSarr["A1"] = new Array();
letterBoxJSarr["A1"]["startDown"] = "A1";
letterBoxJSarr["A1"]["nextDown"] = "B1";
letterBoxJSarr["A1"]["startAcross"] = "A1";
letterBoxJSarr["A1"]["nextAcross"] = "A2";
letterBoxJSarr["A2"] = new Array();
letterBoxJSarr["A2"]["startDown"] = "-";
letterBoxJSarr["A2"]["nextDown"] = "-";
letterBoxJSarr["A2"]["startAcross"] = "A1";
letterBoxJSarr["A2"]["nextAcross"] = "A3";
letterBoxJSarr["A3"] = new Array();
letterBoxJSarr["A3"]["startDown"] = "A3";
letterBoxJSarr["A3"]["nextDown"] = "B3";
letterBoxJSarr["A3"]["startAcross"] = "A1";
letterBoxJSarr["A3"]["nextAcross"] = "A4";
letterBoxJSarr["A4"] = new Array();
letterBoxJSarr["A4"]["startDown"] = "-";
letterBoxJSarr["A4"]["nextDown"] = "-";
letterBoxJSarr["A4"]["startAcross"] = "A1";
letterBoxJSarr["A4"]["nextAcross"] = ".";
letterBoxJSarr["C1"] = new Array();
letterBoxJSarr["C1"]["startDown"] = "A1";
letterBoxJSarr["C1"]["nextDown"] = "D1";
letterBoxJSarr["C1"]["startAcross"] = "C1";
letterBoxJSarr["C1"]["nextAcross"] = "C2";
letterBoxJSarr["C2"] = new Array();
letterBoxJSarr["C2"]["startDown"] = "-";
letterBoxJSarr["C2"]["nextDown"] = "-";
letterBoxJSarr["C2"]["startAcross"] = "C1";
letterBoxJSarr["C2"]["nextAcross"] = "C3";
letterBoxJSarr["C3"] = new Array();
letterBoxJSarr["C3"]["startDown"] = "A3";
letterBoxJSarr["C3"]["nextDown"] = ".";
letterBoxJSarr["C3"]["startAcross"] = "C1";
letterBoxJSarr["C3"]["nextAcross"] = "C4";
letterBoxJSarr["C4"] = new Array();
letterBoxJSarr["C4"]["startDown"] = "-";
letterBoxJSarr["C4"]["nextDown"] = "-";
letterBoxJSarr["C4"]["startAcross"] = "C1";
letterBoxJSarr["C4"]["nextAcross"] = ".";
letterBoxJSarr["B1"] = new Array();
letterBoxJSarr["B1"]["startDown"] = "A1";
letterBoxJSarr["B1"]["nextDown"] = "C1";
letterBoxJSarr["B1"]["startAcross"] = "-";
letterBoxJSarr["B1"]["nextAcross"] = "-";
letterBoxJSarr["D1"] = new Array();
letterBoxJSarr["D1"]["startDown"] = "A1";
letterBoxJSarr["D1"]["nextDown"] = ".";
letterBoxJSarr["D1"]["startAcross"] = "-";
letterBoxJSarr["D1"]["nextAcross"] = "-";
letterBoxJSarr["B3"] = new Array();
letterBoxJSarr["B3"]["startDown"] = "A3";
letterBoxJSarr["B3"]["nextDown"] = "C3";
letterBoxJSarr["B3"]["startAcross"] = "-";
letterBoxJSarr["B3"]["nextAcross"] = "-";
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["lengthDown"] = "4";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["A1"]["lengthAcross"] = "4";
startPosJSarr["C1"] = new Array();
startPosJSarr["C1"]["indexDown"] = "-";
startPosJSarr["C1"]["lengthDown"] = "-";
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
startPosJSarr["C1"]["lengthAcross"] = "4";
startPosJSarr["A3"] = new Array();
startPosJSarr["A3"]["indexDown"] = "3 (A-C)";
startPosJSarr["A3"]["lengthDown"] = "3";
startPosJSarr["A3"]["indexAcross"] = "-";
startPosJSarr["A3"]["lengthAcross"] = "-";
</script><BR>
Du har en massa <br> i ditt nedre JS-block på hemsidan.
Inte nu längre. (De kom dit när jag skrev ut på skärmen i felsökningssyfte.)
Men det gjorde ingen skillnad... :(
Ok. :)
Här:
posA.innerText = startPosJSarr[ixSPA]["indexAcross"];
Försöker du med indexet "ixSPA" accessa ett element. Men eftersom var ixSPA = startPosJSarr[ixLB]["startAcross"]; ej är definierad får du ett felmeddelande; du har ju inte givit något värde till, exempelvis, var ixSPA = startPosJSarr["A1"]["startAcross"];. Är det inte letterBoxJSarr du vill använda?
Tusen tack! :birp
