Reputation: 31
I'm trying to use:
1..cards**.filter** method to find cards number === TRUE, 2..then use cards**.map** method to innerHTML cards.symbol value without the number value.
The end result should be 9 divs displayd in my index.html file ->
<div class="cards">1</div>
<div class="cards">2</div>
<div class="cards">3</div>
<div class="cards">4</div>
<div class="cards">5</div>
<div class="cards">6</div>
<div class="cards">7</div>
<div class="cards">8</div>
<div class="cards">9</div>
//HTML
<body>
<h1>Filter Method</h1>
<div class="container" id="filter-method"></div>
</body>
//JAVASCRIPT
const cards = [
{ symbol: '1', number: true},
{ symbol: '2', number: true},
{ symbol: '3', number: true},
{ symbol: '4', number: true},
{ symbol: '5', number: true},
{ symbol: '6', number: true},
{ symbol: '7', number: true},
{ symbol: '8', number: true},
{ symbol: '9', number: true},
{ symbol: '+', number: false},
{ symbol: '-', number: false},
{ symbol: '*', number: false}
];
const cardsContainer = document.querySelector('#filter-method');
const filteredCards = cards.filter((card) => {
if(card.number === true){
return '<div class="card">' + '<span>' + card.symbol + '<span>' + '</div>';
}
})
cardsContainer.innerHTML = filteredCards.join('\n');
Upvotes: 0
Views: 345
Reputation: 2659
You could do everything in one go using Array.prototype.reduce()
:
const cards = [
{ symbol: '1', number: true },
{ symbol: '2', number: true },
{ symbol: '3', number: true },
{ symbol: '4', number: true },
{ symbol: '5', number: true },
{ symbol: '6', number: true },
{ symbol: '7', number: true },
{ symbol: '8', number: true },
{ symbol: '9', number: true },
{ symbol: '+', number: false },
{ symbol: '-', number: false },
{ symbol: '*', number: false }
];
const cardsContainer = document.querySelector('#filter-method');
cardsContainer.innerHTML = cards.reduce((strHTML, card) => {
if (card.number) strHTML += `<div class="card"><span>${card.symbol}</span></div>`
return strHTML;
}, '')
<body>
<h1>Filter Method</h1>
<div class="container" id="filter-method"></div>
</body>
Upvotes: 1
Reputation: 136094
filter
should return true or false to determine whether to include that item and then map
can be used to turn it to html. I've assumed you want to keep the <span>
elements too.
const cards = [
{ symbol: '1', number: true},
{ symbol: '2', number: true},
{ symbol: '3', number: true},
{ symbol: '4', number: true},
{ symbol: '5', number: true},
{ symbol: '6', number: true},
{ symbol: '7', number: true},
{ symbol: '8', number: true},
{ symbol: '9', number: true},
{ symbol: '+', number: false},
{ symbol: '-', number: false},
{ symbol: '*', number: false}
];
const cardsContainer = document.querySelector('#filter-method');
const filteredCards = cards.filter(card => card.number).map(card => {
return '<div class="card">' + '<span>' + card.symbol + '</span>' + '</div>';
})
cardsContainer.innerHTML = filteredCards.join("\n")
<div class="container" id="filter-method"></div>
Upvotes: 1