Avatar billede hipermedia Nybegynder
08. september 2008 - 15:19 Der er 6 kommentarer og
1 løsning

Fra Array(String) til RegExp

Hej

Jeg har en streng af data, som jeg skal opdele.

Lige nu anvender jeg Array, som kommer fra en streng, med en Split på.

---------------
Kode eks.
---------------
var tmpArray = new Array();
var Data = new Array();

Data = output.split(”[;]”);

For(var i in Data){
  tmpArray = Data[i].split("[:]");
}
---------------
Data streng(output)
Data splitter: [:] og [;]
---------------
1[:]1[:]524[:]Aktiviteter[:]Kim = 25[;]2[:]0[:]157[:]Ting[:]Simon = 4016, Larsen = 21, Tim = 20[;]
---------------

Mit problem er så, at denne form for data gennemgang er meget langsom.

Her ville jeg godt anvende regular expressions, hvis jeg derved opnår hurtigere ”kode” :-)

Men da dette(RegExp) ikke er min stærke side, skal jeg bruge lidt hjælp?

På forhånd tak
hiper
Avatar billede olebole Juniormester
08. september 2008 - 17:01 #1
<ole>

Du kunne starte med en dramatisk hurtigere løkke:

for (var i=0,j=Data.length; i<j; i++) {
  tmpArray = Data[i].split("[:]");
}

- eller endnu hurtigere:

for (var i=Data.length-1; i>=0; i--) {
  tmpArray = Data[i].split("[:]");
}

/mvh
</bole>
Avatar billede olebole Juniormester
08. september 2008 - 17:15 #2
- du kunne også bruge RegExp, men jeg tvivler på, det er hurtigere:

var s = "1[:]1[:]524[:]Aktiviteter[:]Kim = 25[;]2[:]0[:]157[:]Ting[:]Simon = 4016, Larsen = 21, Tim = 20[;]";
var aArr = [];
s.replace(/(.*?)\[;\](.*?)/g, function(a,b,c){aArr.push(b.split(/\[:\]/))});

- så vil 'aArr' være et mulitidimensionelt array med dine data
Avatar billede hipermedia Nybegynder
09. september 2008 - 08:49 #3
OK, tak for hjælpen.

Tro du ikke det hjælper at bruge RegExp?
Avatar billede olebole Juniormester
09. september 2008 - 10:10 #4
Selvtak. Nej, det tror jeg ikke, men det er ikke noget, jeg har testet. Test selv ... så ved du med sikkerhed, hvad der er hurtigst. Hvor meget hjalp det med en hurtigere løkke?
Avatar billede hipermedia Nybegynder
09. september 2008 - 23:01 #5
Ok, jeg tester lidt ;-)

Det gav vel ca. 15%.
Avatar billede olebole Juniormester
10. september 2008 - 00:38 #6
Du kunne også prøve en do/while à la:

var nLen = Data.length-1;
do {
    tmpArray[nLen] = Data[nLen];
}
while(i--);

Den skulle gerne være en del hurtigere end de andre loops, jeg viste - men det er også afhængig af browseren.
Avatar billede olebole Juniormester
10. september 2008 - 00:50 #7
Ups  :)

var nLen = Data.length-1;
do {
    tmpArray[nLen] = Data[nLen].split("[:]");
}
while(i--);

- og tak for points, forresten  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester