[JS] array keys vinden

Pagina: 1
Acties:

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
Hallo,
ik probeer het volgende te doen in JS. Dit is even in PHP omdat ik daarin het duidelijkste kon uitdrukken wat ik probeer:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$a = Array();
$a['a'] = "1";
$a['b'] = "2";
$a['c'] = "3";

$val = getVal("iets");

if(isset($a[$val]))
{
     $val = $a[$val];
}
?>

Ik heb dus een lijstje met waarden als array, waarvan de key een bepaalde waarde aangeeft die door de value vervangen moet worden.
Is dit te doen zonder gelijk alle waarden door te loopen?
Als iemand een handigere manier dan deze array heeft om het te doen is dat ook prima hoor.
Alvast bedankt.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 00:12

NetForce1

(inspiratie == 0) -> true

Dit voorbeeldje kun je bijna een op een naar js kopieren, wat werkt er precies niet aan je js oplossing?

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-11 14:08
Volgens mij ben je, inderdaad, al een heel eind.

Dit werkt niet zeg je?
code:
1
2
3
4
5
6
7
8
9
10
var a = new Array();
var a['a'] = "1";
var a['b'] = "2";
var a['c'] = "3";

var val = "iets";

if(a[val] != "undefined")) {
     val = a[val];
}

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 00:12

NetForce1

(inspiratie == 0) -> true

frickY schreef op vrijdag 06 juni 2008 @ 10:00:
Volgens mij ben je, inderdaad, al een heel eind.

Dit werkt niet zeg je?
code:
1
2
3
4
5
6
7
8
9
10
var a = new Array();
var a['a'] = "1";
var a['b'] = "2";
var a['c'] = "3";

var val = "iets";

if(a[val] != "undefined")) {
     val = a[val];
}
Dit lijkt me niet te gaan werken nee, ik zou die quotjes rond undefined even weghalen.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

frickY schreef op vrijdag 06 juni 2008 @ 10:00:
Volgens mij ben je, inderdaad, al een heel eind.

Dit werkt niet zeg je?
code:
1
2
3
4
5
6
7
8
9
10
var a = new Array();
var a['a'] = "1";
var a['b'] = "2";
var a['c'] = "3";

var val = "iets";

if(a[val] != "undefined")) {
     val = a[val];
}
Ik zou het toch eerder zo doen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
var a = new Array();
a['a'] = "1"; // hier dus geen 'var' voorzetten
a['b'] = "2";
a['c'] = "3";

var val = "iets";

// gebruik "typeof" om het type the checken, waar dus de string 'undefined' uit kan komen
if(typeof a[val] != "undefined")) { 
     val = a[val];
}

[ Voor 7% gewijzigd door Erkens op 06-06-2008 10:14 ]


  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
Ach natuurlijk. undefined. Daar had ik totaal niet aan gedacht. Ik ben niet zo heel ervaren met JS zoals jullie waarschijnlijk gemerkt hebben.
frickY's code werkt in ieder geval prima als je de undefined waarde gebruikt in plaats van de tekst "undefined" ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:43

crisp

Devver

Pixelated

Daar is de 'in' operator voor (en gebruik liever geen Array voor dat soort zaken maar een Object):
JavaScript:
1
2
3
4
5
6
7
8
9
var a = {
  a: 1,
  b: 2,
  c: 3
};

var val = getVal('iets');
if (val in a)
  val = a[val];

Intentionally left blank


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

dtech schreef op vrijdag 06 juni 2008 @ 10:14:
Ach natuurlijk. undefined. Daar had ik totaal niet aan gedacht. Ik ben niet zo heel ervaren met JS zoals jullie waarschijnlijk gemerkt hebben.
frickY's code werkt in ieder geval prima als je de undefined waarde gebruikt in plaats van de tekst "undefined" ;)
Alleen "undefined" is geen waarde. Het beste is om hier 'typeof' bij te gebruiken zoals in mijn aanpassingen op frickY's code :)

Verwijderd

Ik dacht dat in javascript een array daadwerkelijk een array was ipv de php map/array variant... Als in: een array kent simpelweg geen key

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:43

crisp

Devver

Pixelated

Erkens schreef op vrijdag 06 juni 2008 @ 10:21:
[...]

Alleen "undefined" is geen waarde. Het beste is om hier 'typeof' bij te gebruiken zoals in mijn aanpassingen op frickY's code :)
undefined is wel degelijk een global property in javascript hoor ;)
Enkel IE < 6 ondersteund het niet maar dat is simpel op te lossen:
JavaScript:
1
var undefined;
Verwijderd schreef op vrijdag 06 juni 2008 @ 10:33:
Ik dacht dat in javascript een array daadwerkelijk een array was ipv de php map/array variant... Als in: een array kent simpelweg geen key
Array overerft in javascript van Object, maar een Array gebruiken als een hashmap is in javascript geen good practice

Intentionally left blank


Verwijderd

crisp schreef op vrijdag 06 juni 2008 @ 10:40:
Array overerft in javascript van Object, maar een Array gebruiken als een hashmap is in javascript geen good practice
Ah, dus je zou net zo goed hetvolgende geschreven kunnen hebben?
code:
1
2
3
4
var a = new Object();
var a['a'] = "1";
var a['b'] = "2";
var a['c'] = "3";


Er is dus feitelijk geen relatie met de de Array?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:43

crisp

Devver

Pixelated

Verwijderd schreef op vrijdag 06 juni 2008 @ 11:00:
[...]

Ah, dus je zou net zo goed hetvolgende geschreven kunnen hebben?
code:
1
2
3
4
var a = new Object();
var a['a'] = "1";
var a['b'] = "2";
var a['c'] = "3";


Er is dus feitelijk geen relatie met de de Array?
juist, of met een literal zoals in mijn voorbeeld:
JavaScript:
1
2
3
4
5
var a = {
  a: 1,
  b: 2,
  c: 3
};

Aangezien je met een dergelijke hashmap niets hebt aan de array-specifieke methods is het niet slim om daarvoor een array te misbruiken. Plus dat Array itt Object vaak ook prototyped methods heeft die je dan in een for-in constructie moet gaan lopen afvangen. In feite is een Array misbruiken als hashmap net zo onlogisch als bijvoorbeeld Number of String daarvoor te gebruiken...

Schopje naar Webdesign, Markup & Clientside Scripting overigens aangezien dit over clientside scripting gaat :)

[ Voor 4% gewijzigd door crisp op 06-06-2008 11:10 ]

Intentionally left blank

Pagina: 1