Avatar billede learner Praktikant
17. september 2004 - 13:20 Der er 27 kommentarer og
2 løsninger

Hvordan tjekker man om en værdi findes i et array

Hej, jeg har et js array som jeg vil redigere i. Jeg vil tjekke om en af "linierne" har værdien 44 og hvis den har, så skal den (linie) slettes. Eller sagt lidt mere rigtigt: den skal lave en string med alle de andre værdier og anbringe en * mellem hver!

1)Skriver man :
arr = new array();
eller
var arr = new array();
skal man skrive 'var' når det er et array jeg vil lave?
Jeg putter indholdet ind med arr = oldstr.split();

2) Hvordan gør man dette: (skrevet det som jeg plejer i php:-)
var str = 0;
foreach (arr as key => value){
  if (value!="44"){str = str + "*" + value} //kan man forøvrigt det?(+) jeg vil at den skal lave en linie med feks 1*12*21*22*10
}

Hjææælp
Avatar billede learner Praktikant
17. september 2004 - 13:29 #1
ups overskriften blev vist lidt misvisende, sorry
Avatar billede learner Praktikant
17. september 2004 - 13:33 #2
Hvordan gør man dette: (skrevet det lidt som jeg plejer i php:-)
var str = 0;
foreach (arr as key => value){
  if (value!="44"){str = str + "*" + value}
  //kan man forøvrigt bruge + her? jeg vil at str = feks '1*12*21*22*10'
}
Avatar billede ldanielsen Nybegynder
17. september 2004 - 13:48 #3
Hvordan gør man dette: (skrevet det lidt som jeg plejer i php:-)
var str = "", sep = "";
for (i=0;i<arr.length();i++){
  if (arr[]!="44")str = str + sep + value;
  }
Avatar billede ldanielsen Nybegynder
17. september 2004 - 13:51 #4
Der var jeg ALT for hurtig, men nu er det testet:

var arr = new Array(23,34,44,56,12,44,67);

var str = "", sep = "";
for (i=0;i<arr.length;i++){
  if (arr[i] != "44"){
    str = str + sep + arr[i];
    sep = "*";
    }
  }
Avatar billede learner Praktikant
17. september 2004 - 14:01 #5
det ligner noget jeg kan bruge :o)
Jeg er igang med at sætte det sammen og så smider jeg det lige herind så du evt kan kigge på det for mig :o) Tusind tak!
Avatar billede ldanielsen Nybegynder
17. september 2004 - 14:24 #6
Tak!

Men hvad med regular expressions? Denne kan gøre det samme:

var str = arr.join("*");
str = str.replace(/((^|\*)44)+($|\*)/g, "*")
str = str.replace(/(^\*)|($\*)/g, "")
Avatar billede learner Praktikant
17. september 2004 - 14:32 #7
jo det her du helt ret i. der er nogle gode ideer der!
for jeg får jo en streng ind med feks
213*312*23*1243*1241*232*44
eller
554*5*44*586*55
eller
44*546*55*55*58

og så kunne man simpelthen bare fjerne alle '*44' og '44' og så er den pot ude!
Det lyder meget simpelt!

Kanon ide! :o)
Avatar billede learner Praktikant
17. september 2004 - 14:37 #8
MEN Hvordan laver jeg dem????
Det ser lidt forvirrende ud med alle de tegn der er imellem ( og )

:o)
Avatar billede learner Praktikant
17. september 2004 - 14:41 #9
Herunder er det jeg indtil videre er nået frem til:
Det er til en function der gemmer de linie-numre som brugeren sætter flueben i. De bliver gemt i en cookie som en lang række adskilt af *
Senere kan brugeren klikke på vis mine foretrukne!


Her er feks en af de checkboxe der sætter function'en i gang:
<input name="44" type="checkbox" value="checked" onClick="SetFavoritWantsid('favorit_wantsids','44')">


Og her er javascript function'en: (som jo skal laves med replace istedet!)
function SetFavoritWantsid(cookiename,wantsid){
    var expiration = new Date();
    expiration.setTime(expiration.getTime() + 60000*24*21); // 21 dage
    var OldCookie     = GetCookie(cookiename);
    var NewCookie     = "";
    var sep         = "*";
    var arr         = OldCookie.split("*");
   
    // Der tjekkes om checkboxen er checked (om value='checked')
    var status         = document.form.wantsid.value;
    if(status=="checked"){
        var NewCookie = OldCookie + sep + wantsid;
        WriteCookie(cookiename,NewCookie,expiration);
        alert('Føjet til dine foretrukne!');
    }
   
    if(status!="checked"){
        // Denne wantsid skal fjernes fra cookien, hvis den er deri!
        if (OldCookie==""){
            // Der er ingen cookie sat og der skal derfor bare sættes denne wantsid i en ny cookie
            WriteCookie(cookiename,wantsid,expiration);
        } else {
            // der er en gammel cookie med nogle wantsid i
            for (i=0;i<arr.length;i++){
                // skriver kun de andre wantsid igen, ikke denne!
                if (arr[i] != wantsid){
                    NewCookie = NewCookie + sep + arr[i];
                }
            }
           
            if (NewCookie==""){
                // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                DelCookie(cookiename);
            } else {
                // Der er stadig nogle wantsid'er tilbage og de skal skrives i cookien!
                WriteCookie(cookiename,NewCookie,expiration);
            }
        }
        alert('Fjernet fra dine foretrukne!');
    }
}


Derudover er der selvfølgelig 3 andre function'er (DelCookie,WriteCookie og GetCookie)
Avatar billede ldanielsen Nybegynder
17. september 2004 - 14:44 #10
nej, for hvad så med 44*56*444*678*345*4444*1234?

den skal kun fjerne '*44*', eller '<liniestart>44*' eller '*44<linieslut>'

Og det går ikke at erstatte '*44*' med '', vel? Det skal erstattes med '*', og så må man lige slutte med at fjerne '*' i begge ender.

Regular Expressions er ret forvirrende, men det er også lidt sjovt!!

du kan jo bare bruge den for-ting jeg lavede, den er da til at overskue.
Avatar billede ldanielsen Nybegynder
17. september 2004 - 14:48 #11
ang din kode: Dine strenge kommer til at starte med *, læg mærke til hvordan jeg i mit eks venter med at putte '*' i sep til den første er skrevet
Avatar billede ldanielsen Nybegynder
17. september 2004 - 14:55 #12
Nu går der sgu snart sport i det, se lige her:

for (i=0;i<arr.length;i++){
  if (arr[i] == 44){
    arr.splice(i, 1);
    i--;
    }
  }
var str = arr.join("*");
Avatar billede learner Praktikant
17. september 2004 - 14:56 #13
okay, jeg tror jeg gør som du siger :o)

Jeg bruger den for() og ja den sep skal rettes!

Må jeg spørge dig: Tror du ellers det virker det jeg har lavet? For jeg har ikke lavet ret meget js før :o)

Og tusind tak

point får du Ida
Avatar billede learner Praktikant
17. september 2004 - 14:58 #14
17/09-2004 14:55:44

Den forstår jeg ik helt :-)

splice?
Avatar billede learner Praktikant
17. september 2004 - 15:01 #15
Har lige afsat lidt flere point og givet dig dem, men vil du lige hjælpe det færdigt? Det er jo næsten færdigt :o)
Avatar billede learner Praktikant
17. september 2004 - 15:19 #16
Jeg har selv forsøgt at lave det!

Er du sød at fortælle mig om det er helt ved siden af? og om der er nogle fejl deri!

    function SetFavoritWantsid(cookiename,wantsid){
        var expiration = new Date();
        expiration.setTime(expiration.getTime() + 60000*24*21); // 21 dage
        var OldCookie     = GetCookie(cookiename);
        var NewCookie     = "";
        var sep         = "*";
        var arr         = OldCookie.split("*");
       
        // Der tjekkes om checkboxen er checked (om value='checked')
        var status         = document.form.wantsid.value;
        if(status=="checked"){
            if (OldCookie==""){
                var NewCookie = wantsid;
            } else {
                var NewCookie = OldCookie + sep + wantsid;
            }
            WriteCookie(cookiename,NewCookie,expiration);
            alert('Føjet til dine foretrukne!');
        }
       
        if(status!="checked"){
            // Denne wantsid skal fjernes fra cookien, hvis den er deri!
            if (OldCookie==""){
                // Der er ingen cookie sat og der skal derfor bare sættes denne wantsid i en ny cookie
                WriteCookie(cookiename,wantsid,expiration);
            } else {
                // der er en gammel cookie med nogle wantsid i
               
                for (i=0;i<arr.length;i++){
                    // skriver kun de andre wantsid igen, ikke denne!
                    if (arr[i] == wantsid){
                        if (NewCookie==""){
                            NewCookie = arr[i];
                        } else {
                            NewCookie = NewCookie + sep + arr[i];
                        }
                    }
                }
               
                if (NewCookie==""){
                    // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                    DelCookie(cookiename);
                } else {
                    // Der er stadig nogle wantsid'er tilbage og de skal skrives i cookien!
                    WriteCookie(cookiename,NewCookie,expiration);
                }
            }
            alert('Fjernet fra dine foretrukne!');
        }
    }
Avatar billede grunken Nybegynder
17. september 2004 - 15:21 #17
og endnu kortere ;o)

a = [1,2,3,44,5,6]

for(i in a)if(a[i]==44)a.splice(i,1);
a=a.join("*")
Avatar billede grunken Nybegynder
17. september 2004 - 15:22 #18
og det skal nævnes at "for(i in a)" nærmer sig din php konstrukt "foreach" meget ;o)
Avatar billede learner Praktikant
17. september 2004 - 15:27 #19
bliver resultatet så at a er en række tal adskilt af * som feks 65*66*15*11 ?

så skal jeg lave den som her: ??

for(i in arr)if(arr[i]==44)arr.splice(i,1);
NewCookie=arr.join("*")

rigtigt?
Avatar billede grunken Nybegynder
17. september 2004 - 15:29 #20
nemlig ;o)
Avatar billede learner Praktikant
17. september 2004 - 15:31 #21
Tager den hensyn til hvis der ikke er andre end 44 ?? Så sletter den jo alt!
Kan dette så udføres: NewCookie=arr.join("*");
Avatar billede grunken Nybegynder
17. september 2004 - 15:40 #22
hvis der ikke er andre end 44, og den bliver slettet vil newCookie være = "" i mit eksempel

Hvis det skal foregå anderledes er du nødt til at som ldanielsen foreslår at bruge Regular Expressions ;o)
Avatar billede ldanielsen Nybegynder
17. september 2004 - 15:45 #23
Ang din kode:

Du benytter functionerne WriteCookie, GetCookie og DelCookie. Dem kan jeg ikke se, er det nogle du har skrevet/fundet? De et nemlig ikke standard js funktioner.

Og:

// Der tjekkes om checkboxen er checked (om value='checked')
var status        = document.form.wantsid.value;
if(status=="checked"){ ...

Du har en checkboxen der hedder 'wantsid', ok? og du skal vide om den er checked!

først skal du adressere feltet, og det gør du bedst sådan: document.FormNavn.FeltNavn

så du skal give din form et name:
<form name="myForm" ....>

og så vil feltet kunne adresseres sådan:
document.myForm.wantsid

Når du skal vide om den er checked bruger du checked-property'en, så din kode skulle være:

// Der tjekkes om checkboxen er checked (om value='checked')
var status  = document.myForm.wantsid.checked;
if(status == true){ ...

eller blot
if(status){ ...


og:
WriteCookie(cookiename,wantsid,expiration);

du sender wantsid med funktionen, jeg går udfra at det er et tal, og at det er den wantsid der sendes med som et argument til funktionen? man det er lidt forvirrende at den hedder det samme som din checkbox.
Avatar billede ldanielsen Nybegynder
17. september 2004 - 15:52 #24
Hvis der kun er 44 i array'et skal det vel resultere i en tom cookie, ikke? Og det er jeg 99% sikker på at alle de mange metoder vil kunne levere :o)
Avatar billede learner Praktikant
17. september 2004 - 16:18 #25
Okay, tak!
Avatar billede learner Praktikant
17. september 2004 - 23:53 #26
Jeg får stadig en fejl!

Har ellers forsøgt... Men jeg tror en af fejlene er her:
var status = document.form.wantsid.checked;

Hvordan skal jeg få den til at opfatte værdien af wantsid i stedet for 'wantsid'?

Men jeg tror os der er en eller flere fejl! :-(

Gider du ta en hurtig kigger på det :o) :o) :o)

det er en foreach der spytter checkboxene ud!
her er koden:
<input name="<?php echo $wantsid; ?>" type="checkbox" value="checked" onClick="SetFavoritWantsid('favorit_wantsids','<?php echo $wantsid; ?>')" <?php if ($favorit_wantsid_list[$wantsid]=="ja"){echo "checked";} ?>>


her er ALT JS:
<script language="JavaScript" type="text/JavaScript">
    <!--
    function DelCookie (name,path,domain){
        if (getCookie(name)){
            document.cookie = name + "=" +
            ((path == null) ? "" : "; path=" + path) +
            ((domain == null) ? "" : "; domain=" + domain) +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
    }
   
    function GetCookie(name){
        var cname = name + "=";             
        var dc = document.cookie;           
        if (dc.length > 0){
            begin = dc.indexOf(cname);     
            if (begin != -1){
                begin += cname.length;     
                end = dc.indexOf(";", begin);
                if (end == -1) end = dc.length;
                return unescape(dc.substring(begin, end));
            }
        }
        return null;
    }

    function WriteCookie(name, value, expires, path, domain){
        document.cookie = name + "=" + escape(value) +
        ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
        ((path == null)    ? "" : "; path=" + path) +
        ((domain == null)  ? "" : "; domain=" + domain);
    }

    function SetFavoritWantsid(cookiename,wantsid){
        var expiration = new Date();
        expiration.setTime(expiration.getTime() + 60000*24*21); // 21 dage
        var OldCookie     = GetCookie(cookiename);
        var NewCookie     = "";
        var sep         = "*";
        var arr         = OldCookie.split("*");
       
        var status         = document.form.wantsid.checked;
        if(status){
            if ((OldCookie=="")||(!OldCookie)){
                NewCookie = wantsid;
            } else {
                NewCookie = OldCookie + sep + wantsid;
            }
            WriteCookie(cookiename,NewCookie,expiration);
            alert('Føjet til dine foretrukne!');
        }
       
        if(!status){
            // Denne wantsid skal fjernes fra cookien, hvis den er deri!
            if (OldCookie==wantsid){
                // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                DelCookie(cookiename);
            } else{
                // der er en gammel cookie med nogle wantsid i
                for(i in arr)if(arr[i]==wantsid)arr.splice(i,1);
                NewCookie=arr.join("*");
                WriteCookie(cookiename,NewCookie,expiration);
            }
            alert('Fjernet fra dine foretrukne!');
        }
    }
   
    function FocusSearchField() {
        if (document.form.searchword.value == 'søgeord') {
            document.form.searchword.value = '';
        }
    }
    //-->
</script>


TAAAAAK :-)
Avatar billede learner Praktikant
18. september 2004 - 00:08 #27
jeg opretter som et nyt spm!

Takker for alt hjælpen!

Michael

LUKKET!
Avatar billede ldanielsen Nybegynder
22. september 2004 - 14:17 #28
document.form.searchword skriver du bl.a.

Betyder det at din form har name="form", for det vil jeg fraråde. Kald din form noget andet.
Avatar billede learner Praktikant
22. september 2004 - 15:06 #29
Ok, tak :o)

Jeg fik heldigvis hjælp med det :-) og nu kører det bare :-)
Det var roenving der knækkede nødden!

I øvrigt os tak for dine indslag! :o)
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