this is a div </div> <script type="text/javascript"> var myArray = new"> this is a div </div> <script type="text/javascript"> var myArray = new"> this is a div </div> <script type="text/javascript"> var myArray = new" />

Hoe toegang te krijgen tot waarde in multidimensionale array?

Ik heb de volgende code:

<html>
<body>
<div style="background-color: lightblue;" onClick="alert(myArray[0][1])">
this is a div
</div>

<script type="text/javascript">
var myArray = new Array();
myArray[0][0] = 0;
myArray[0][1] = 00012;
myArray[0][2] = 00006;
myArray[1][0] = 1;
myArray[1][1] = 00004;
myArray[1][2] = 00001;
</script>
</body>
</html>

Wanneer ik op de div klik, gebeurt er niets; er is geen waarschuwing. Als ik de binnenkant van de waarschuwing verander in een tekenreeks, zoals 'testen', dan komt het waarschuwingsvenster wel tevoorschijn.

Wat doe ik verkeerd? Hoe kan ik de waarde van een item in een multidimensionale array krijgen?

Bedankt!

0

3 antwoord

Schrijf het zo op:

<div style="background-color: lightblue;" onClick="alert(myArray[0][1])">
    this is a div
</div>

<script type='text/javascript'>
    var myArray = [];
    myArray.push([0, 00012, 00006]);
    myArray.push([1, 00004, 00001]);
</script>

Bewerken

Het probleem is dat wanneer je dit schrijft:

var myArray = new Array();
myArray[0][0] = 0;

Het eerste item in myArray is niet gedefinieerd, dus u kunt er niets mee doen. Gebruikend deze methode, zou u de serie eerst moeten creëren:

var myArray = new Array();
myArray[0] = new Array();
myArray[0][0] = 0;

Maar ik denk dat de methode om de vierkante notatie te gebruiken met push schoner is.

2
toegevoegd
Is de manier waarop ik het verkeerd deed? Ik deed het op die manier op basis van wat ik op deze pagina heb gelezen: kavoir.com/2009/02/javascript-multi-dimensional-array.html
toegevoegd de auteur Nate, de bron
Bedankt voor je hulp. Hoe is het eerste item in de array undefined? Is dat omdat ik het een waarde van nul toewijs? Ik ben gewend om te programmeren in PHP en ik ben een beetje in de war wat ik verkeerd doe :)
toegevoegd de auteur Nate, de bron
@Nate het enige deel dat u hebt weggelaten, is het maken van het inner array-object. Zie mijn bewerking.
toegevoegd de auteur McGarnagle, de bron
@Natuur niet omdat u het nul toewijst; het is leeg omdat er nog niets aan is toegewezen. Dat wil zeggen, als u var a = new Array (); alert (a [0]); dat u undefined geeft. Dus wanneer u een [0] [0] probeert te schrijven, is dat hetzelfde als undefined behandelen alsof het een array is.
toegevoegd de auteur McGarnagle, de bron

De eerste regel van uw code:

var myArray = new Array();

... zal een nieuwe eendimensionale array, myArray maken, die geen elementen bevat. Wanneer je zegt:

myArray[0][0] = 0;          

... u probeert toegang te krijgen tot een dimensie die nog niet bestaat. Dat wil zeggen, myArray [0] is undefined omdat hoewel myArray een array is, het nog geen elementen heeft - dus myArray [0] [0] is hetzelfde als zeggen undefined [0] .

Daarom moet u myArray [0] toewijzen om naar een nieuwe array te verwijzen voordat u toegang kunt krijgen tot myArray [0] [0] . Hetzelfde geldt voor myArray [1] , omdat JavaScript op zich geen multi-dimensionale arrays heeft, maar arrays van arrays heeft. Dus dit is wat je nodig hebt (voor een minimale wijziging van je bestaande code):

var myArray = [];
myArray[0] = [];
myArray[0][0] =  00012;
myArray[0][1] = 00012;
myArray[0][2] = 00006;
myArray[1] = [];
myArray[1][0] = 1;
myArray[1][1] = 00004;
myArray[1][2] = 00001;

Merk op dat [] gelijk is aan nieuwe Array() .

Een gemakkelijker te lezen en typen optie is om de subarrays te maken via de syntaxis van de array-array:

var myArray = [];
myArray[0] = [00012, 00012, 00006];
myArray[1] = [1, 00004, 00001];

Of, het gemakkelijkst van alles (vooral als dit hard-gecodeerde waarden zijn) is het creëren van het hele ding in één verklaring via een genestelde array letterlijke (witruimte wordt genegeerd):

var myArray = [
                [00012, 00012, 00006],
                [1, 00004, 00001]
              ];

(Merk ook op dat die voorloopnullen voor numerieke gegevens verdwijnen: gebruik strings ( "00012" in plaats van 00012 ) als u de nullen wilt behouden.)

2
toegevoegd

Dit is hoe je een multidimensionale array declareert:

MultiArray = new Array(2)

MultiArray [0] = new Array(2)

MultiArray [0][0] = "Tom"

MultiArray [0][1] = "scientist"

MultiArray [1] = new Array(2)

MultiArray [1][0] = "Beryl"

MultiArray [1][1] = "engineer"
2
toegevoegd