abooAyoob Skrevet 1. september 2014 Del Skrevet 1. september 2014 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
Gjest Slettet+1523 Skrevet 1. september 2014 Del Skrevet 1. september 2014 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
abooAyoob Skrevet 1. september 2014 Forfatter Del Skrevet 1. september 2014 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
hjahre Skrevet 1. september 2014 Del Skrevet 1. september 2014 (endret) 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 1. september 2014 av hjahre Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå