-1

I am interested to know why this code - rendering HTML elements with data from array using Array.map() - works fine and elements appear on screen:

<div className="container">
    {data.map((d) => (
        <div className="item">
            <img 
            src={d.img} 
            alt=""/>
            <h3>{d.title}</h3>
        </div>
    ))}
</div>           

but this code - rendering HTML elements with data from an object using forEach() - doesn't work and nothing appears on screen although no error is thrown and console.log()'s within <div className="betCard"></div> work fine:

<div className="container">
    {Object.keys(data).forEach((bet) => (
        <div className="betcard">
            <p>{data[bet]["name"]}</p>
            <p>{data[bet]["oddsDecimal"]}</p>
            <p>{data[bet]["genericName"]}</p>
        </div>
    ))}
</div>
joekadi
  • 19
  • 3

2 Answers2

2

map returns a list of results, while forEach always returns undefined (so nothing gets passed to React to render). The latter code could be successfully written as:

<div className="container">
    {Object.keys(data).map((bet) => (
        <div className="betcard">
            <p>{data[bet]["name"]}</p>
            <p>{data[bet]["oddsDecimal"]}</p>
            <p>{data[bet]["genericName"]}</p>
        </div>
    ))}
</div>
edemaine
  • 2,699
  • 11
  • 20
1

Foreach doesn't return the result, map does.

{Object.keys(data).map((bet) => (

would solve the issue.

sid
  • 1,779
  • 8
  • 10