Nikola Stoyanov
Nikola Stoyanov

Reputation: 59

Javascript looping through a list not working

I'm trying to make a table of emojis and made a foreach loop to make a table:

emojis = ['๐Ÿ˜€', '๐Ÿ˜', '๐Ÿ˜‚', '๐Ÿ˜ƒ', '๐Ÿ˜„', '๐Ÿ˜…', '๐Ÿ˜†', '๐Ÿ˜‡', '๐Ÿ˜ˆ', '๐Ÿ˜‰', '๐Ÿ˜Š', '๐Ÿ˜‹', '๐Ÿ˜Œ', '๐Ÿ˜', '๐Ÿ˜Ž', '๐Ÿ˜', '๐Ÿ˜', '๐Ÿ˜‘', '๐Ÿ˜’', '๐Ÿ˜“', '๐Ÿ˜”', '๐Ÿ˜•', '๐Ÿ˜–', '๐Ÿ˜—', '๐Ÿ˜˜', '๐Ÿ˜™', '๐Ÿ˜š', '๐Ÿ˜›', '๐Ÿ˜œ', '๐Ÿ˜', '๐Ÿ˜ž', '๐Ÿ˜Ÿ', '๐Ÿ˜ ', '๐Ÿ˜ก', '๐Ÿ˜ข', '๐Ÿ˜ฃ', '๐Ÿ˜ค', '๐Ÿ˜ฅ', '๐Ÿ˜ฆ', '๐Ÿ˜ง', '๐Ÿ˜จ', '๐Ÿ˜ฉ', '๐Ÿ˜ช', '๐Ÿ˜ซ', '๐Ÿ˜ฌ', '๐Ÿ˜ญ', '๐Ÿ˜ฎ', '๐Ÿ˜ฏ', '๐Ÿ˜ฐ', '๐Ÿ˜ฑ', '๐Ÿ˜ฒ', '๐Ÿ˜ณ', '๐Ÿ˜ด', '๐Ÿ˜ต', '๐Ÿ˜ถ', '๐Ÿ˜ท', '๐Ÿ™ˆ', '๐Ÿ™‰', '๐Ÿ™Š', '๐Ÿ‘†', '๐Ÿ‘‡', '๐Ÿ‘ˆ', '๐Ÿ‘‰', '๐Ÿ‘Š', '๐Ÿ‘‹', '๐Ÿ‘Œ', '๐Ÿ‘', '๐Ÿ‘Ž', '๐Ÿ‘', 'โšก', 'โœŠ', 'โœ‹', 'โœŒ', 'โœ', 'โค', 'โญ']
var i = 0
document.getElementById("emojiTable").innerHTML += "<table><tr>"
emojis.forEach(emoji => {
  if(i == 12) {
    document.getElementById("emojiTable").innerHTML += "</tr><tr>"
    i = 0
  }
  document.getElementById("emojiTable").innerHTML += "<td>"+emoji+"</td>"
  i ++
  })
  document.getElementById("emojiBAR").innerHTML += "</table>"

My problem is that when i run the code instead of getting a 12 x 6 table i get this weird piece of HTML:

<table><tbody><tr></tr></tbody></table>๐Ÿ˜€๐Ÿ˜๐Ÿ˜‚๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‡๐Ÿ˜ˆ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‹๐Ÿ˜Œ๐Ÿ˜๐Ÿ˜Ž๐Ÿ˜๐Ÿ˜๐Ÿ˜‘๐Ÿ˜’๐Ÿ˜“๐Ÿ˜”๐Ÿ˜•๐Ÿ˜–๐Ÿ˜—๐Ÿ˜˜๐Ÿ˜™๐Ÿ˜š๐Ÿ˜›๐Ÿ˜œ๐Ÿ˜๐Ÿ˜ž๐Ÿ˜Ÿ๐Ÿ˜ ๐Ÿ˜ก๐Ÿ˜ข๐Ÿ˜ฃ๐Ÿ˜ค๐Ÿ˜ฅ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜จ๐Ÿ˜ฉ๐Ÿ˜ช๐Ÿ˜ซ๐Ÿ˜ฌ๐Ÿ˜ญ๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ฐ๐Ÿ˜ฑ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿ˜ด๐Ÿ˜ต๐Ÿ˜ถ๐Ÿ˜ท๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ‘†๐Ÿ‘‡๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘Š๐Ÿ‘‹๐Ÿ‘Œ๐Ÿ‘๐Ÿ‘Ž๐Ÿ‘โšกโœŠโœ‹โœŒโœโคโญ

I have no idea what is causing this. How can i fix this?

Upvotes: 3

Views: 101

Answers (3)

charlietfl
charlietfl

Reputation: 171669

A more practical approach that creates a table element and uses Table.insertRow() and Row.insertCell():

emojis = ['๐Ÿ˜€', '๐Ÿ˜', '๐Ÿ˜‚', '๐Ÿ˜ƒ', '๐Ÿ˜„', '๐Ÿ˜…', '๐Ÿ˜†', '๐Ÿ˜‡', '๐Ÿ˜ˆ', '๐Ÿ˜‰', '๐Ÿ˜Š', '๐Ÿ˜‹', '๐Ÿ˜Œ', '๐Ÿ˜', '๐Ÿ˜Ž', '๐Ÿ˜', '๐Ÿ˜', '๐Ÿ˜‘', '๐Ÿ˜’', '๐Ÿ˜“', '๐Ÿ˜”', '๐Ÿ˜•', '๐Ÿ˜–', '๐Ÿ˜—', '๐Ÿ˜˜', '๐Ÿ˜™', '๐Ÿ˜š', '๐Ÿ˜›', '๐Ÿ˜œ', '๐Ÿ˜', '๐Ÿ˜ž', '๐Ÿ˜Ÿ', '๐Ÿ˜ ', '๐Ÿ˜ก', '๐Ÿ˜ข', '๐Ÿ˜ฃ', '๐Ÿ˜ค', '๐Ÿ˜ฅ', '๐Ÿ˜ฆ', '๐Ÿ˜ง', '๐Ÿ˜จ', '๐Ÿ˜ฉ', '๐Ÿ˜ช', '๐Ÿ˜ซ', '๐Ÿ˜ฌ', '๐Ÿ˜ญ', '๐Ÿ˜ฎ', '๐Ÿ˜ฏ', '๐Ÿ˜ฐ', '๐Ÿ˜ฑ', '๐Ÿ˜ฒ', '๐Ÿ˜ณ', '๐Ÿ˜ด', '๐Ÿ˜ต', '๐Ÿ˜ถ', '๐Ÿ˜ท', '๐Ÿ™ˆ', '๐Ÿ™‰', '๐Ÿ™Š', '๐Ÿ‘†', '๐Ÿ‘‡', '๐Ÿ‘ˆ', '๐Ÿ‘‰', '๐Ÿ‘Š', '๐Ÿ‘‹', '๐Ÿ‘Œ', '๐Ÿ‘', '๐Ÿ‘Ž', '๐Ÿ‘', 'โšก', 'โœŠ', 'โœ‹', 'โœŒ', 'โœ', 'โค', 'โญ']

const table = document.createElement('table');
let row;

emojis.forEach((emoji, i) => {
  if (i % 12 === 0) {
    row = table.insertRow();
  }
   row.insertCell().innerHTML = emoji;  
})

document.getElementById("emojiTable").append(table)
<div id="emojiTable"></div>

Upvotes: 4

Mister Jojo
Mister Jojo

Reputation: 22320

you want that ??

const emojis = 
  [ '๐Ÿ˜€', '๐Ÿ˜', '๐Ÿ˜‚', '๐Ÿ˜ƒ', '๐Ÿ˜„', '๐Ÿ˜…', '๐Ÿ˜†', '๐Ÿ˜‡', '๐Ÿ˜ˆ', '๐Ÿ˜‰', '๐Ÿ˜Š', '๐Ÿ˜‹'
  , '๐Ÿ˜Œ', '๐Ÿ˜', '๐Ÿ˜Ž', '๐Ÿ˜', '๐Ÿ˜', '๐Ÿ˜‘', '๐Ÿ˜’', '๐Ÿ˜“', '๐Ÿ˜”', '๐Ÿ˜•', '๐Ÿ˜–', '๐Ÿ˜—'
  , '๐Ÿ˜˜', '๐Ÿ˜™', '๐Ÿ˜š', '๐Ÿ˜›', '๐Ÿ˜œ', '๐Ÿ˜', '๐Ÿ˜ž', '๐Ÿ˜Ÿ', '๐Ÿ˜ ', '๐Ÿ˜ก', '๐Ÿ˜ข', '๐Ÿ˜ฃ'
  , '๐Ÿ˜ค', '๐Ÿ˜ฅ', '๐Ÿ˜ฆ', '๐Ÿ˜ง', '๐Ÿ˜จ', '๐Ÿ˜ฉ', '๐Ÿ˜ช', '๐Ÿ˜ซ', '๐Ÿ˜ฌ', '๐Ÿ˜ญ', '๐Ÿ˜ฎ', '๐Ÿ˜ฏ'
  , '๐Ÿ˜ฐ', '๐Ÿ˜ฑ', '๐Ÿ˜ฒ', '๐Ÿ˜ณ', '๐Ÿ˜ด', '๐Ÿ˜ต', '๐Ÿ˜ถ', '๐Ÿ˜ท', '๐Ÿ™ˆ', '๐Ÿ™‰', '๐Ÿ™Š', '๐Ÿ‘†'
  , '๐Ÿ‘‡', '๐Ÿ‘ˆ', '๐Ÿ‘‰', '๐Ÿ‘Š', '๐Ÿ‘‹', '๐Ÿ‘Œ', '๐Ÿ‘', '๐Ÿ‘Ž', '๐Ÿ‘', 'โšก', 'โœŠ', 'โœ‹'
  , 'โœŒ', 'โœ', 'โค', 'โญ']
  ;
(function() // IIFE generateTable
  {
  let eTable = document.createElement('table')
    , cRow   = null

  emojis.forEach( (emoji,indx)=>
    {
    if ( !(indx % 12)) cRow = eTable.insertRow()
    cRow.insertCell().innerHTML = emoji
    })
  document.getElementById('emojiTable').appendChild(eTable)
  })()
table {
  border-collapse: collapse;
  margin: .5em;
}
td {
  padding: .2em .7em;
  border: 1px solid grey;
}
<div id="emojiTable"></div>

Upvotes: 0

Pranav Rustagi
Pranav Rustagi

Reputation: 2731

Try this :

emojis = ['๐Ÿ˜€', '๐Ÿ˜', '๐Ÿ˜‚', '๐Ÿ˜ƒ', '๐Ÿ˜„', '๐Ÿ˜…', '๐Ÿ˜†', '๐Ÿ˜‡', '๐Ÿ˜ˆ', '๐Ÿ˜‰', '๐Ÿ˜Š', '๐Ÿ˜‹', '๐Ÿ˜Œ', '๐Ÿ˜', '๐Ÿ˜Ž', '๐Ÿ˜', '๐Ÿ˜', '๐Ÿ˜‘', '๐Ÿ˜’', '๐Ÿ˜“', '๐Ÿ˜”', '๐Ÿ˜•', '๐Ÿ˜–', '๐Ÿ˜—', '๐Ÿ˜˜', '๐Ÿ˜™', '๐Ÿ˜š', '๐Ÿ˜›', '๐Ÿ˜œ', '๐Ÿ˜', '๐Ÿ˜ž', '๐Ÿ˜Ÿ', '๐Ÿ˜ ', '๐Ÿ˜ก', '๐Ÿ˜ข', '๐Ÿ˜ฃ', '๐Ÿ˜ค', '๐Ÿ˜ฅ', '๐Ÿ˜ฆ', '๐Ÿ˜ง', '๐Ÿ˜จ', '๐Ÿ˜ฉ', '๐Ÿ˜ช', '๐Ÿ˜ซ', '๐Ÿ˜ฌ', '๐Ÿ˜ญ', '๐Ÿ˜ฎ', '๐Ÿ˜ฏ', '๐Ÿ˜ฐ', '๐Ÿ˜ฑ', '๐Ÿ˜ฒ', '๐Ÿ˜ณ', '๐Ÿ˜ด', '๐Ÿ˜ต', '๐Ÿ˜ถ', '๐Ÿ˜ท', '๐Ÿ™ˆ', '๐Ÿ™‰', '๐Ÿ™Š', '๐Ÿ‘†', '๐Ÿ‘‡', '๐Ÿ‘ˆ', '๐Ÿ‘‰', '๐Ÿ‘Š', '๐Ÿ‘‹', '๐Ÿ‘Œ', '๐Ÿ‘', '๐Ÿ‘Ž', '๐Ÿ‘', 'โšก', 'โœŠ', 'โœ‹', 'โœŒ', 'โœ', 'โค', 'โญ']

var i = 0
var table = document.getElementById("emojiTable");
var str = "<table><tr>";

emojis.forEach(emoji => {
  if (i == 12) {
    str += "</tr><tr>";
    i = 0
  }
  str += "<td>" + emoji + "</td>";
  i++
})

table.innerHTML = str;
//document.getElementById("emojiBAR").innerHTML += "</table>"
<div id="emojiTable"> </div>

Upvotes: 1

Related Questions