Gå til innhold

[Løst] Javascript: hakeparentes vs . for tilgang til objekter


Anbefalte innlegg

Prøver å lære javscript og står fast ved en liten oppgave:

var friends = new Object();

friends.bill = {
    firstName: "Bill",
    lastName: "Gates",
    number: "1",
    address: ['OMT', 1, 0864, 'Oslo']
};
friends.steve = {
    firstName: "Steve",
    lastName: "Jobs",
    number: "2",
    address: ['OMT', 2, 0864, 'Oslo']
};
friends.eirik = {
    firstName: "Eirik",
    lastName: "Braathen",
    number: "3",
    address: ['Lake drive', 3, 0864, 'Biri']
};

function list(contacts){
    for (friend in contacts){
        console.log(friend);
    }
}

function search(name){
    for (friend in friends){
        if (friend.firstName === name){
            console.log(friend);
        }
    }
}

hvis jeg nå kaller search("Steve"); så får jeg ingenting. Hvis endrer if betingelsen til if (friends[friend].firstName), og så kaller search("Steve"), så funker det. Men er ikke de to if betingelsene ekvivalente?

 

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+1523

Nei, ikke i en for-in-løkke. Jeg husker ikke helt detaljene rundt hvorfor, men i en for-in må du tenke på friends som et array og ikke som et objekt med objekter, slik at du må bruke hakeparenteser rundt nøkkelen du ser etter. Skal se om jeg finner igjen den rent tekniske forklaringen.

Lenke til kommentar

Nei, ikke i en for-in-løkke. Jeg husker ikke helt detaljene rundt hvorfor, men i en for-in må du tenke på friends som et array og ikke som et objekt med objekter, slik at du må bruke hakeparenteser rundt nøkkelen du ser etter. Skal se om jeg finner igjen den rent tekniske forklaringen.

Ahaa, jepp, sjekket i konsollen min nå, og du har rett. Funker fint å gjøre en sånn sammenligning via punktom notasjon hvis ikke man er i noe for/in løkke... javascript er merkelige greier altså. Veldig fint om du finner den tekniske forklaringen et sted. Men takk for hjelpen uansett!

Lenke til kommentar

 

Nei, ikke i en for-in-løkke. Jeg husker ikke helt detaljene rundt hvorfor, men i en for-in må du tenke på friends som et array og ikke som et objekt med objekter, slik at du må bruke hakeparenteser rundt nøkkelen du ser etter. Skal se om jeg finner igjen den rent tekniske forklaringen.

Ahaa, jepp, sjekket i konsollen min nå, og du har rett. Funker fint å gjøre en sånn sammenligning via punktom notasjon hvis ikke man er i noe for/in løkke... javascript er merkelige greier altså. Veldig fint om du finner den tekniske forklaringen et sted. Men takk for hjelpen uansett!

 

Jeg vil tro grunnen er fordi navnet starter på stor forbokstav.

friends['steve'].firstName

er det du finner når du er i for-løkka, så for å fine rett person er det lurt å gjøre om til små (eller store) bokstaver. Følgende kodesnutt burde funke

 

function search(name)
{   
    for (friend in friends)
    {   
        if (friend.firstName.toLowerCase() === name.toLowerCase()) 
        {   
            console.log(friend);
        }
    }
}
EDIT:

Innser at jeg tok feil. Grunnen til at det ikke funker er fordi javaskript henter ut "nøklene" når man bruker den type for-løkke. Det riktige blir

function search(name)
{   
    for (friendKey in friends)
    {   
        var friend = friends[friendKey];
        if (friend.firstName.toLowerCase() === name.toLowerCase()) 
        {   
            console.log(friend);
        }
    }
}
Endret av hjahre
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...