/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Hvordan finder man om et tal er en del af ~
Fra : Leif Mathiasen


Dato : 13-03-08 20:49

Jeg har et lille problem med mængder.

Hvis jeg har: var tal = 20;
Og jeg har en mængde af godkendte værdier fx.
[10,20,30,40,50]
hvis jeg nu ønsker at undersøge om "tal" er en del af mængden,
kan det gøres på følgende måde:
if (tal == 10){gør et eller andet}
if (tal == 20){gør et eller andet}
osv.
Dette er selvfølgelig besværligt.
Jeg forestiller mig at man må kunne skrive noget i retning af:
if (tal in godkendteTal) {gør et eller andet}
hvor godkendteTal=[10,20,30,40,50]
Hvordan gør man det i praksis??

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Lasse Reichstein Nie~ (13-03-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 13-03-08 22:04

Leif Mathiasen <leifmath@mail.dk> writes:

> Hvis jeg har: var tal = 20;
> Og jeg har en mængde af godkendte værdier fx.
> [10,20,30,40,50]
> hvis jeg nu ønsker at undersøge om "tal" er en del af mængden,
> kan det gøres på følgende måde:
> if (tal == 10){gør et eller andet}
> if (tal == 20){gør et eller andet}
> osv.
> Dette er selvfølgelig besværligt.

og endnu mere besværligt at vedligeholde hvis mængden af godkendte
tal ændrer sig.

> Jeg forestiller mig at man må kunne skrive noget i retning af:
> if (tal in godkendteTal) {gør et eller andet}
> hvor godkendteTal=[10,20,30,40,50]
> Hvordan gør man det i praksis??

Mange måder. Jeg ville holde det simpelt og gøre noget i stil med:

var godkendteTal = [10,20,30,40,50];

function inArray(value, array) {
for(var i = 0; i < array.length; i++) {
if (array[i] == value) { return true; }
}
return false;
}

if (inArray(tal, godkendteTal)) {
// gør noget
}

En mere kompliceret metode er at omskrive de godkendte tal til
egenskaber på et objekt, og så slå op om egenskaben findes:

var godkendteTal = [10,20,30,40,50];
var godkendteTalIndex = {};
for (var i = 0; i < godkendteTal.length; i++) { // byg index
godkendteTalIndex[godkendteTal[i]] = true;
}

if (godkendteTalIndex[tal]) {
// gør noget
}

Det primære svar er at der ikke er en nem metode til at tjekke
om et element findes i et array. Du bliver nødt til at løbe
det igennem (mindst en gang for at bygge et index der er hurtigt
at bruge, eller hver gang, hvilket er lige så godt hvis arrayet
er kort og ikke bruges meget tit).

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Leif Mathiasen (14-03-2008)
Kommentar
Fra : Leif Mathiasen


Dato : 14-03-08 00:20

Lasse Reichstein Nielsen wrote in dk.edb.internet.webdesign.clientside:
> Leif Mathiasen <leifmath@mail.dk> writes:
>
> > Hvis jeg har: var tal = 20;
> > Og jeg har en mængde af godkendte værdier fx.
> > [10,20,30,40,50]
> > hvis jeg nu ønsker at undersøge om "tal" er en del af mængden,
> > kan det gøres på følgende måde:
> > if (tal == 10){gør et eller andet}
> > if (tal == 20){gør et eller andet}
> > osv.
> > Dette er selvfølgelig besværligt.
>
> og endnu mere besværligt at vedligeholde hvis mængden af godkendte
> tal ændrer sig.
>
> > Jeg forestiller mig at man må kunne skrive noget i retning af:
> > if (tal in godkendteTal) {gør et eller andet}
> > hvor godkendteTal=[10,20,30,40,50]
> > Hvordan gør man det i praksis??
>
> Mange måder. Jeg ville holde det simpelt og gøre noget i stil med:
>
> var godkendteTal = [10,20,30,40,50];
>
> function inArray(value, array) {
> for(var i = 0; i < array.length; i++) {
> if (array[i] == value) { return true; }
> }
> return false;
> }
>
> if (inArray(tal, godkendteTal)) {
> // gør noget
> }
>
> En mere kompliceret metode er at omskrive de godkendte tal til
> egenskaber på et objekt, og så slå op om egenskaben findes:
>
> var godkendteTal = [10,20,30,40,50];
> var godkendteTalIndex = {};
> for (var i = 0; i < godkendteTal.length; i++) { // byg index
> godkendteTalIndex[godkendteTal[i]] = true;
> }
>
> if (godkendteTalIndex[tal]) {
> // gør noget
> }
>
> Det primære svar er at der ikke er en nem metode til at tjekke
> om et element findes i et array. Du bliver nødt til at løbe
> det igennem (mindst en gang for at bygge et index der er hurtigt
> at bruge, eller hver gang, hvilket er lige så godt hvis arrayet
> er kort og ikke bruges meget tit).
>
> Tak for dit svar. Det er åbenbart ikke så nemt, hvilket undre mig. Hvorfor
kender java script ikke til begrebet mængder og delmængder?? Har man ikke
mængdeoperatorer i stil med fx. følgende:

A <= B Sand, hvis A er en delmængde af B
A >= B Sand, hvis B er en delmængde af A
C IN B Sand, hvis C er element i mængden B

eks. taget fra Turbo Pascal. Et sprog der nok ikke bruges så meget mere.
Med venlig hilsen
Leif


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Stig Johansen (14-03-2008)
Kommentar
Fra : Stig Johansen


Dato : 14-03-08 08:18

Leif Mathiasen wrote:

> eks. taget fra Turbo Pascal.
> Et sprog der nok ikke bruges så meget mere.

Nej, det er lang tid siden det blev til Delphi.
Delphi 1 har haft 10 års jubilæum.
Ovre i core grupperne er der estimeret 3M+ _registrerede_ brugere
(udviklere) jfr udtalelse fra en CodeGear(former Borland) repræsentant.

--
Med venlig hilsen
Stig Johansen

Lasse Reichstein Nie~ (14-03-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 14-03-08 18:44

Leif Mathiasen <leifmath@mail.dk> writes:

> Tak for dit svar. Det er åbenbart ikke så nemt, hvilket undre mig. Hvorfor
> kender java script ikke til begrebet mængder og delmængder?? Har man ikke
> mængdeoperatorer i stil med fx. følgende:
>
> A <= B Sand, hvis A er en delmængde af B
> A >= B Sand, hvis B er en delmængde af A
> C IN B Sand, hvis C er element i mængden B

JavaScript er et simpelt sprog med et *meget* lille standardbibliotek
(... Math og Date og ... tjah, det er ca. det).

Der er ikke nogen højnivuau-datastrukturer der følger med som standard.

Man kan selv lave dem, hvis man er til den slags:
---
function Set() {
this.elements = new Object();
for(var i = 0; i < arguments.length; i++) {
this.add(arguments[i]);
}
}
Set.prototype.add = function add(element) {
for(var i = 0; i < arguments.length; i++) {
this.elements[arguments[i]] = true;
}
return this;
};
Set.prototype.remove = function remove(element) {
for(var i = 0; i < arguments.length; i++) {
if (this.elements.hasOwnProperty(arguments[i])) {
delete this.elements[arguments[i]];
}
}
return this;
};
Set.prototype.contains = function contains(element) {
return this.elements.hasOwnProperty(element);
};
Set.prototype.foreach = function foreach(action) {
for(var elem in this.elements) {
if (this.elements.hasOwnProperty(elem)) { // not inherited
if (action(elem) === false) { return false; }
}
}
return true;
};
Set.prototype.containsAll = function containsAll(set) {
var self = this;
return set.foreach(function(elem) {
return self.contains(elem);
});
};
---

Bruges som fx:
---
var set1 = new Set("foo","bar","baz");
var set2 = new Set("bar","baz");
alert([set1.containsAll(set2),set2.containsAll(set1)]); // true,false
---

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Leif Mathiasen (15-03-2008)
Kommentar
Fra : Leif Mathiasen


Dato : 15-03-08 01:35

Lasse Reichstein Nielsen wrote in dk.edb.internet.webdesign.clientside:

>
> JavaScript er et simpelt sprog med et *meget* lille standardbibliotek
> (... Math og Date og ... tjah, det er ca. det).
>
> Der er ikke nogen højnivuau-datastrukturer der følger med som standard.
>
> Man kan selv lave dem, hvis man er til den slags:
>
> Ja, man kan jo lave alt, selv med det mest simple sprog. Jeg takker for dine
> forslag, men tror jeg vil strikke en løsning sammen som passer til mine
> enkle behov. Jeg er behøver så ikke bruge mere tid på at bladre igennem den
> bog jeg lånte på bibliteket. Mændeopratorer findes ikke i JS. Så blev jeg så
> klog.
> Med venlig hilsen LeifMath

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Christian Hansen (13-03-2008)
Kommentar
Fra : Christian Hansen


Dato : 13-03-08 23:04

Leif Mathiasen wrote:
> Dette er selvfølgelig besværligt.
> Jeg forestiller mig at man må kunne skrive noget i retning af:
> if (tal in godkendteTal) {gør et eller andet}
> hvor godkendteTal=[10,20,30,40,50]
> Hvordan gør man det i praksis??

Du kan gøre det på en hacket måde:

var godkendtetal = [10,20,30,40,50];
if ( /,20,/.test("," + godkendtetal.join(",") + "," ) ) alert("true");
else alert("false");

Altså mængden håndteres som en string og så tester man blot med et
regex, om den pågældende sekvens er tilstede - en sekvens består altid
af ,[0-9]+,

Det er slammet, men det er kort :)

Mvh Christian

Leif Mathiasen (14-03-2008)
Kommentar
Fra : Leif Mathiasen


Dato : 14-03-08 01:15

Christian Hansen wrote in dk.edb.internet.webdesign.clientside:
> Leif Mathiasen wrote:
> > Dette er selvfølgelig besværligt.
> > Jeg forestiller mig at man må kunne skrive noget i retning af:
> > if (tal in godkendteTal) {gør et eller andet}
> > hvor godkendteTal=[10,20,30,40,50]
> > Hvordan gør man det i praksis??
>
> Du kan gøre det på en hacket måde:
>
> var godkendtetal = [10,20,30,40,50];
> if ( /,20,/.test("," + godkendtetal.join(",") + "," ) ) alert("true");
> else alert("false");
>
> Altså mængden håndteres som en string og så tester man blot med et
> regex, om den pågældende sekvens er tilstede - en sekvens består altid
> af ,[0-9]+,
>
> Det er slammet, men det er kort :)
>
> Mvh Christian

Tak for dit forslag. Jeg forstår det ikke, men hvis blot det virker ...

Mvh LeifMath



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger (15-03-2008)
Kommentar
Fra : Birger


Dato : 15-03-08 10:22

"Leif Mathiasen" <leifmath@mail.dk> skrev i en meddelelse
news:47d9850e$0$90263$14726298@news.sunsite.dk...
> Jeg har et lille problem med mængder.
>
> Hvis jeg har: var tal = 20;
> Og jeg har en mængde af godkendte værdier fx.
> [10,20,30,40,50]
> hvis jeg nu ønsker at undersøge om "tal" er en del af mængden,
> kan det gøres på følgende måde:
> if (tal == 10){gør et eller andet}
> if (tal == 20){gør et eller andet}
> osv.
> Dette er selvfølgelig besværligt.
> Jeg forestiller mig at man må kunne skrive noget i retning af:
> if (tal in godkendteTal) {gør et eller andet}
> hvor godkendteTal=[10,20,30,40,50]
> Hvordan gør man det i praksis??
>


Opret array med tilladte værdier.
var tilladt = new Array(10, 20, 30, 40, 50);
tilladt.indexOf( tal) giver nu -1 hvis tal ikke findes i Arrayet - og ellers
indexet.

if ( tilladt.indexOf( tal) > -1) {
// tal er tilladt
}
else {
// tal er ikke tilladt
}


--
Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt, hurtigt og billigt. Daglig
opdatering.



Christian Hansen (15-03-2008)
Kommentar
Fra : Christian Hansen


Dato : 15-03-08 11:25

Birger wrote:

> tilladt.indexOf( tal) giver nu -1 hvis tal ikke findes i Arrayet - og ellers
> indexet.

Array.indexOf() er ikke en standardiseret metode og virker ikke i
Internet Explorer - ej heller IE8 beta 1.

indexOf() blev indført i firefox 1.5 sammen med andre snille metoder.

Vil man lave et script, der virker på tværs af platforme, bør man altså
holde sig fra ikke standardiserede metoder.

Mvh Christian

Birger (15-03-2008)
Kommentar
Fra : Birger


Dato : 15-03-08 20:04

"Christian Hansen" <chrsen@fundanemt.com> skrev i en meddelelse
news:47dba393$0$15881$edfadb0f@dtext01.news.tele.dk...
> Birger wrote:
>
>> tilladt.indexOf( tal) giver nu -1 hvis tal ikke findes i Arrayet - og
>> ellers indexet.
>
> Array.indexOf() er ikke en standardiseret metode og virker ikke i Internet
> Explorer - ej heller IE8 beta 1.
>
> indexOf() blev indført i firefox 1.5 sammen med andre snille metoder.
>
> Vil man lave et script, der virker på tværs af platforme, bør man altså
> holde sig fra ikke standardiserede metoder.
>


Vidste jeg vist egentlig godt. Det er på strenge jeg bruger den...

var tilladt = ' 10, 20, 30, 40, 50,'; // begynd altid med mellemrum og slut
altid med et komma
tilladt.indexOf( tal) giver nu -1 hvis tal ikke findes i strengen - og
ellers positionen.

if ( tilladt.indexOf( ' '+tal+',') > -1) {
// tal er tilladt
}
else {
// tal er ikke tilladt
}


Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt, hurtigt og billigt. Daglig
opdatering.



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste