Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

JavaScript JavaScript Loops, Arrays and Objects Tracking Multiple Items with Arrays Using For Loops with Arrays

Josh Bennett
Josh Bennett
15,258 Points

It is only printing the last item in the array.

My code looks the same as in the video, I think. I've checked it repeatedly but...no dice.

Here's my code

var playList = [
  'I Did It My Way',
  'Respect',
  'Imagine',
  'Born to Run',
  'Louie Louie',
  'Maybellene'
];

function print(message) {
  document.write(message);
}


function printList ( list ) {
    var listHTML = '<ol>';
    for ( var i = 0; i < list.length; i += 1 ) {
      listHTML = '<li>' + list[i] + '</li>';
    }
    listHTML += '</ol>';
    print(listHTML);
}

printList(playList)
Austin Whipple
Austin Whipple
29,725 Points

Hey Josh, I updated your question with some code block markup. Helps readability a bit.

Julie Myers
Julie Myers
7,627 Points

Here is the coding that works. The main issue is you were missing the plus operator after listHTML inside the for loop.

var playList = [
  'I Did It My Way',
  'Respect',
  'Imagine',
  'Born to Run',
  'Louie Louie',
  'Maybellene'
];

function print(message) {
   console.log(message);
}


function printList (list) {
    var listHTML = '<ol>';
    for (var i = 0; i < list.length; i++) {
      listHTML += '<li>' + list[i] + '</li>';
    }
    listHTML += '</ol>';
    print(listHTML);
}

printList(playList);

3 Answers

akak
akak
29,446 Points

You forgot a plus sign in your loop:

for ( var i = 0; i < list.length; i += 1 ) {
      listHTML = '<li>' + list[i] + '</li>'; // it should be listHTML +='<li> ...rest of the code
    }

Without it you were constantly overriding previous value and that's why only the last one is printed out. Cheers.

Austin Whipple
Austin Whipple
29,725 Points

So your code looks like it should run fine except for the missing semicolon at the end of the last line. Check out this other Community conversation about a similar issue. Might help.