webForumDet fria alternativet

Arrayer

12 svar · 325 visningar · startad av aasah

aasahMedlem sedan mars 20033 451 inlägg
#1
  1. 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?

  2. Måste index vara heltal, eller kan man indexera med bokstäver?

  3. Hur ser en multidimensionell array ut i JS? Hur definieras den?

Peter SMedlem sedan dec. 20025 484 inlägg
#2
  1. Du behöver inte veta dess storlek
  2. Nej, s.k. associativa arrayer finns också:
var arr = [];
arr["uno"] = 1;
arr["dos"] = "2";
arr["tres"] = new Number(3);
  1. 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();
}

:)

aasahMedlem sedan mars 20033 451 inlägg
#3

Toppen! :e Tack!

aasahMedlem sedan mars 20033 451 inlägg
#4

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... :( ;))

felmedd.GIF
Peter SMedlem sedan dec. 20025 484 inlägg
#5

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)";
aasahMedlem sedan mars 20033 451 inlägg
#6

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?

  1. 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?
Peter SMedlem sedan dec. 20025 484 inlägg
#7
if (typeof startPosJSarr["A1"] == "undefined"){
  // startPosJSarr["A1"] = new Array(); kan inte ha gjorts
}
  1. Arrayen kan du fylla var helst det passar. Globala variabler är inte kopplade till någon del i HTML-koden.
aasahMedlem sedan mars 20033 451 inlägg
#8

Tackar! :D

aasahMedlem sedan mars 20033 451 inlägg
#9

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">&nbsp;</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="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('A', 2);">
                             <input type="hidden" name="A 2" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('A', 3);">
                             <input type="hidden" name="A 3" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('A', 4);">
                             <input type="hidden" name="A 4" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td></tr><tr><td class="index">B</td><td class="vit" onclick="markWord('B', 1);">
                             <input type="hidden" name="B 1" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="svart">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('B', 3);">
                             <input type="hidden" name="B 3" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="svart">&nbsp;&nbsp;&nbsp;&nbsp;</td></tr><tr><td class="index">C</td><td class="vit" onclick="markWord('C', 1);">
                             <input type="hidden" name="C 1" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('C', 2);">
                             <input type="hidden" name="C 2" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('C', 3);">
                             <input type="hidden" name="C 3" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="vit" onclick="markWord('C', 4);">
                             <input type="hidden" name="C 4" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td></tr><tr><td class="index">D</td><td class="vit" onclick="markWord('D', 1);">
                             <input type="hidden" name="D 1" size=1 value="">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="svart">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="svart">&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="svart">&nbsp;&nbsp;&nbsp;&nbsp;</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>
Peter SMedlem sedan dec. 20025 484 inlägg
#10

Du har en massa <br> i ditt nedre JS-block på hemsidan.

aasahMedlem sedan mars 20033 451 inlägg
#11

Inte nu längre. (De kom dit när jag skrev ut på skärmen i felsökningssyfte.)

Men det gjorde ingen skillnad... :(

Peter SMedlem sedan dec. 20025 484 inlägg
#12

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?

aasahMedlem sedan mars 20033 451 inlägg
#13

Tusen tack! :birp

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb