Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

JavaScript JavaScript Loops, Arrays and Objects Tracking Data Using Objects The Student Record Search Challenge

Using my getStudentReport-function introduces a problem

My student-search is working as it should, however when I try to use the getStudentReport instead of a string variable in the loop the program will only return the details of the last name that was entered, does anyone know why this is , and how to fix it ? Thanks! These are my function and code:

function getStudentReport(student){ var report = "<h2> Student: " + student.name + "</h2>"; report += "<p>Track: " + student.track+ "</p>"; report += "<p>Achievements: " + student.achievements+ "</p>"; report += "<p>Points: " + student.points+ "</p>"; return report; }

while(true){ print(html); search = prompt("Search for a student to view his/her data or type 'quit' "); if(search==="quit"){ break; }

for(let i = 0; i <students.length; i++){
  student = students[i];

  if(search===student.name){
    studentFound = true;
    // html = getStudentReport(student);
    // print(html);
    html += "<h2> Student: " + student.name + "</h2>";
    html += "<p>Track: " + student.track+ "</p>";
    html += "<p>Achievements: " + student.achievements+ "</p>";
    html += "<p>Points: " + student.points+ "</p>";
    //when I use getStudentReport() here in stead of the html-string I get only the last name entered returned to the screen 
  }
}
if (studentFound===false){
  html =  search + " is not on the list";
}

}

Steven Parker
Steven Parker
211,004 Points

This must not be all the code.

There's a reference to a "print" function, and to a variable named "html", but neither is defined here.

If you're using the workspaces, you can share everything at once if you make a snapshot of your workspace and post the link to it here.

Also, when posting code, always use the instructions for code formatting in the Markdown Cheatsheet pop-up below the "Add an Answer" area. :arrow_heading_down:

2 Answers

Steven Parker
Steven Parker
211,004 Points

There's still more code.

The students array, the HTML portion, and the CSS. This would be a good situation for that workspace snapshot!

However, I spotted the problem anyway. Your individual lines all use a concatenating assignment ("+="); but when you call the function you have a normal assignment, which replaces anything previously stored. Just use the same operator with the function:

        html += getStudentReport(student);

Thanks, that fixed it !

you're right, something went wrong there, this is the full code:

let html = '';
let student;
let studentFound= false;
let search;

const print = (message) =>{
  var divOutput = document.getElementById('output');
  divOutput.innerHTML = message
}
const getStudentReport = (student)=> {
  var report = "<h2> Student: " + student.name + "</h2>";
  report += "<p>Track: " + student.track+ "</p>";
  report += "<p>Achievements: " + student.achievements+ "</p>";
  report += "<p>Points: " + student.points+ "</p>";
  return report;
}

while(true){
  print(html);
  search = prompt("Search for a student to view his/her data or type 'quit' ");
  if(search==="quit"){
    break;
  }

    for(let i = 0; i <students.length; i++){
      student = students[i];

      if(search===student.name){
        studentFound = true;
        // html = getStudentReport(student);
        // print(html);
        html += `<h2> Student: ${student.name}  </h2>`;
        html += `<p>Track: ${student.track} </p>`;
        html += `<p>Achievements: ${student.achievements} </p>`;
        html += `<p>Points: ${student.points} </p>`;
        //when I use getStudentReport() here in stead of the html-string I get only the last name entered returned to the screen
      }
    }
    if (studentFound===false){
      html =  search + " staat niet op de lijst";
    }
}