Citat:
Ursprungligen postat av
mssoulstar
Kod:
<script>
var students = [
{ name: 'Klara', grade: 'A' },
{ name: 'Andrea', grade: 'B' },
{ name: 'Emil', grade: 'C' },
{ name: 'Sarah', grade: 'A' },
];
function getGrade()
{
var namnet = document.getElementById("namnet").value;
for(var i = 0; i < students.length;i++)
{
if (namnet == name)
{
document.getElementById("resultat").value= grade;
}
else
{
document.getElementById("resultat").value = "du är inte inskriven";
}
}
}
</script>
</head>
<body>
<form name="f1">
Skriv in ditt namn: <input type="text" id="namnet" /><br/><br/>
<input type="button" value="få betyg" onclick="getGrade()" /><br/><br/>
Ditt betyg: <input type="text" id="resultat" />
</form>
Nich testade din metod... men jag antar att jag "kopplar" fel någonstans.. för får bara fram else if satsens svar "du är inte inskriven"
Ja det där såg inte helt rätt ut. Du kan exempelvis inte bara hänvisa till
name när du vill ha ett värde från de lagrade objekten. Skriv istället
students[i].name eller liknande. Annars finns det ganska smidiga array-metoder du kan använda dig av för att loopa igenom listan med objekt, till exempel .forEach(). Här använder jag dock .some(), som stannar så fort du returnerar true. Således behöver du inte fortsätta scanna igenom alla namn om du redan har hittat rätt. Observera att i varje iteration ("omgång", "upprepning") av .some() kommer
student innehålla ett objekt med en elev. Då kan vi skriva
student.name för att få namnet och
student.grade för att få betyget.
Kod:
var students = [
{ name: 'Klara', grade: 'A' },
{ name: 'Andrea', grade: 'B' },
{ name: 'Emil', grade: 'C' },
{ name: 'Sarah', grade: 'A' },
];
function getGrade() {
var name = document.getElementById( 'namnet' ).value;
students.some( function( student ) {
if( student.name == name ) {
document.getElementById("resultat").value = student.grade;
return true;
}
} );
}