[js] splice-en op een waarde ipv key

Pagina: 1
Acties:

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
ik heb een array:
JavaScript:
1
reeks = new Array('ab','cd','ef','gh');


nu wil ik de waarde ef er uit halen. Op zich niet lastig:
JavaScript:
1
reeks.splice(2,1);

maar dit betekent dat je moet weten dat ef op de derde positie staat.
Is er geen functie om aan de hand van de waarde te splicen ipv aan de hand van de key?

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

JavaScript:
1
var key = reeks.indexOf('ef');

en voor browsers die jaren achterlopen dit toevoegen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if (!Array.prototype.indexOf)
{
    Array.prototype.indexOf = function(searchElement, fromIndex)
    {
        var l = this.length, i = 0;
        if (fromIndex)
        {
            i = fromIndex;
            if (i < 0)
            {
                i += l;
                if (i < 0) i = 0;
            }
        }

        while (i < l)
        {
            if (this[i] === searchElement) return i;
            i++;
        }

        return -1;
    }
}

;)

Intentionally left blank


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
en achterlopen in hoeveel jaren is dat dan?
heb nu deze functie gemaakt:
JavaScript:
1
2
3
4
function verwijderEntryUitArray(reeks, waarde){
    var key = reeks.indexOf(waarde);
    reeks.splice(key,1);
}

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

indexOf komt uit Javascript 1.5. Even opzoeken welke browsers hiermee compatible zijn ?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

hobbeldebobbel schreef op woensdag 31 januari 2007 @ 13:56:
en achterlopen in hoeveel jaren is dat dan?
indexOf voor array's is meen ik een javascript 1.5 extension. Iig Mozilla ondersteund het, en misschien Opera en Safari ook wel. IE is zoals je weet een bejaard paard en ondersteund het dus niet ;)

Intentionally left blank


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
ok ik had hem werkende voor zeg maar een dimensionale id's
wat nu als ik zo'n array heb:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
reeks = new Array('a',new Array('1','2','3'),'c','d','e','f','g','h');
function verwijderEntryUitArray(freeks, waarde){ 
    if (!Array.prototype.indexOf) 
    { 
        Array.prototype.indexOf = function(searchElement, fromIndex) 
        { 
        var l = this.length, i = 0; 
        if (fromIndex) 
        { 
            i = fromIndex; 
            if (i < 0) 
            { 
            i += l; 
            if (i < 0) i = 0; 
            } 
        } 
    
        while (i < l) 
        { 
            if (this[i] === searchElement) return i; 
            i++; 
        } 
    
        return -1; 
        } 
    }
    var key = freeks.indexOf(waarde); 
    freeks.splice(key,1); 
}

en als ik dan over de reeks de verwijderEntryUitArray() haal dan krijg ik een heel raar resultaat zoals te zien op: deze url

het lijkt alsof hij een deel van de functie eraan als entry in de array plakt....

[ Voor 27% gewijzigd door hobbeldebobbel op 31-01-2007 22:05 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

Ten eerste check je niet of indexOf toevallig -1 teruggeeft en ten tweede is voor wat je hier schetst een heel andere benadering nodig; namelijk recursie.

Voorbeeldje:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function verwijderEntryUitArray(freeks, waarde)
{
    var i = 0;
    while (i < freeks.length)
    {
        if (freeks[i] instanceof Array)
        {
            verwijderEntryUitArray(freeks[i], waarde);
        }
        else if (freeks[i] == waarde)
        {
            freeks.splice(i, 1);
            i--;
        }
    
        i++;
    }
}


Deze verwijderd trouwens alle instances van 'waarde'

Intentionally left blank


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
okay.. thanks deze werkt wel....maar dan moeten de keys's getallen zijn. Ik heb net mn hele systeem gebouwd op associatieve array's (klopt dat wat ik zeg?) hij ziet er namelijk zo uit:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
    [nieuweboot1] => Array
    (
        [discipline] => kb
        [instructeur] => I_3
        [0] => 3
        [1] => 6
        [2] => 8
        [3] => 4
        [4] => 7
        [5] => 9
    )
    [nieuweboot2] => Array
    (
        [instructeur] => 0
    )
)

[ Voor 30% gewijzigd door hobbeldebobbel op 31-01-2007 22:56 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

hobbeldebobbel schreef op woensdag 31 januari 2007 @ 22:48:
okay.. thanks deze werkt wel....maar dan moeten de keys's getallen zijn. Ik heb net mn hele systeem gebouwd op associatieve array's (klopt dat wat ik zeg?) hij ziet er namelijk zo uit:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
    [nieuweboot1] => Array
    (
        [discipline] => kb
        [instructeur] => I_3
        [0] => 3
        [1] => 6
        [2] => 8
        [3] => 4
        [4] => 7
        [5] => 9
    )
    [nieuweboot2] => Array
    (
        [instructeur] => 0
    )
)
pfft, je maakt het ook wel steeds lastiger hè? :P
Maar ten eerste zou je dan geen array moeten gebruiken maar een Object. Ten tweede kan je met for in door alle properties van je object heenlopen. Uiteraard kan je ook geen splice gebruiken dan maar zal je een delete van de betreffende property moeten doen.

Intentionally left blank


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
pfft, je maakt het ook wel steeds lastiger hè?
hmm tja daar heb ik een handje van... het leek eerst zo makkelijk, maar het word steeds uitgebreider en deze dingen die ik nu heb die had ik niet kunnen bedenken zeg maar...

je geeft dus het advies om een object te maken. Ok ik snapte dus net de array's enzo en dacht goed, bedoel aardig, kon schrijven..... een object dus...

wat is een object? en hoe maak ik die dan?
ik lees ergens op internet dat associatieve array's ongeveer hetzelfde zijn als objecten.... maar ik snap het even niet..

afgezien van dat object gebeuren, kan ik er dan even niet makkelijker het volgende van maken:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array 
( 
    [nieuweboot1] => Array 
    ( 
        [discipline] => kb 
        [instructeur] => I_3 
        [cursisten] => Array
                  (
                                   [0] => 3 
                                   [1] => 6 
                                   [2] => 8 
                                   [3] => 4 
                                   [4] => 7 
                                   [5] => 9
                   )
    ) 
    [nieuweboot2] => Array 
    ( 
        [instructeur] => 0 
    ) 
)

maar dan word het inderdaad lastig om dat als bootid35 uit te lezen... met een for loop

hmmm


//edit: deze link is zeer interessant. Het komt er opneer dat je een object maakt en hieraan propertys geeft:
JavaScript:
1
2
3
4
bootindeling = new Object()
bootindeling.instructeur = 'instructeurs 1'
bootindeling.discipline  = 'kb'
bootindeling.cursisten = new Array(1,4,5,6,3,2)

klopt dit een beetje?
maar hoe kan ik dan meerdere boten maken?

[ Voor 134% gewijzigd door hobbeldebobbel op 01-02-2007 23:18 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet

Pagina: 1