Reputation: 41
I try to get Found (name) grade is (grade) but seems like the code only work for the first person which is Bob, but when it is George, it said not found.
var studentArray = [
{ 'name': 'Bob', 'grade': 87 },
{ 'name': 'Fred', 'grade': 82 },
{ 'name': 'George', 'grade': 93 },
{ 'name': 'Robert', 'grade': 85 }
];
function findStudent(studentName) {
var i = 0; //var i = 0 should be inside
var output = "";
while (i < studentArray.length) {
if(studentName === studentArray[i].name) {
output = ( "Found " + studentName + " their grade is " + studentArray[i]['grade']);
} else {
output = ("Student " + studentName + " not found.");
}
i++;
}
return output;
}
var name = 'George';
var result = findStudent(name);
console.log(result);
Upvotes: 0
Views: 54
Reputation: 207531
You need to do the check outside the loop
var studentArray = [{ 'name': 'Bob', 'grade': 87 }, { 'name': 'Fred', 'grade': 82 }, { 'name': 'George', 'grade': 93 }, { 'name': 'Robert', 'grade': 85 }]
function findStudent(studentName) {
var i = 0;
var output = "";
while (i < studentArray.length) {
if (studentName === studentArray[i].name) {
output = ("Found " + studentName + " their grade is " + studentArray[i]['grade']);
}
i++;
}
if (!output) {
output = ("Student " + studentName + " not found.");
}
return output;
}
var name = 'George';
var result = findStudent(name);
console.log(result);
Most people would use find()
var studentArray = [{ 'name': 'Bob', 'grade': 87 }, { 'name': 'Fred', 'grade': 82 }, { 'name': 'George', 'grade': 93 }, { 'name': 'Robert', 'grade': 85 }]
function findStudent(studentName) {
var out = studentArray
.find(function (o) {
return o.name===studentName;
});
return out
? `Found ${studentName} their grade is ${out.grade}`
: `Student ${studentName} not found.`
}
var name = 'George';
var result = findStudent(name);
console.log(result);
Upvotes: 1
Reputation: 2027
If you Found, you should immediately return, and not go through the whole loop
Upvotes: 0