Reputation: 41
How can I write the function to filter the players who have won a particular award say FIFA FIFPro World XI award using the methods map, filter and reduce only.
No need to use the loops.
let players = [
{
name: "Marcelo",
age: 30,
debut: 2007,
team: "Real Madrid",
position: "Defender",
country: "Brazil",
url:
"https://media.guim.co.uk/7247cfe16161d428218f34b5b0d7e5485bfa84a2/152_149_2221_1333/500.jpg",
awards: [
{
name: "FIFA FIFPro World XI",
year: 2019
}
]
},
{
name: "Virgil van Dijk",
age: 26,
debut: 2011,
team: "Liverpool",
position: "Defender",
country: "Netherlands",
url:
"https://media.guim.co.uk/e798a161e0ecd2b27895aa6e5e8f29351db0d98c/0_130_5472_3283/500.jpg",
awards: [
{
name: "UEFA Men's Player of the Year Award",
year: 2019
},
{
name: "FIFA FIFPro World X",
year: 2019
}
]
}
];
Upvotes: 0
Views: 85
Reputation: 1903
Using only filter
and map
.
let players = [
{
name: "Marcelo",
age: 30,
debut: 2007,
team: "Real Madrid",
position: "Defender",
country: "Brazil",
url:
"https://media.guim.co.uk/7247cfe16161d428218f34b5b0d7e5485bfa84a2/152_149_2221_1333/500.jpg",
awards: [
{
name: "FIFA FIFPro World XI",
year: 2019
}
]
},
{
name: "Virgil van Dijk",
age: 26,
debut: 2011,
team: "Liverpool",
position: "Defender",
country: "Netherlands",
url:
"https://media.guim.co.uk/e798a161e0ecd2b27895aa6e5e8f29351db0d98c/0_130_5472_3283/500.jpg",
awards: [
{
name: "UEFA Men's Player of the Year Award",
year: 2019
},
{
name: "FIFA FIFPro World X",
year: 2019
}
]
}
];
let playersFiltered = players.filter((player) => {
let haveWonAtLeastOneAward = player.awards.map((award) => {
return award.name.includes('FIFA FIFPro World XI');
}).includes(true);
return haveWonAtLeastOneAward;
});
console.log(playersFiltered);
Upvotes: 1
Reputation: 49985
Using Array.filter
and Array.some
seems to be the easiest way:
let players = [
{
name: "Marcelo",
age: 30,
debut: 2007,
team: "Real Madrid",
position: "Defender",
country: "Brazil",
url:
"https://media.guim.co.uk/7247cfe16161d428218f34b5b0d7e5485bfa84a2/152_149_2221_1333/500.jpg",
awards: [
{
name: "FIFA FIFPro World XI",
year: 2019
}
]
},
{
name: "Virgil van Dijk",
age: 26,
debut: 2011,
team: "Liverpool",
position: "Defender",
country: "Netherlands",
url:
"https://media.guim.co.uk/e798a161e0ecd2b27895aa6e5e8f29351db0d98c/0_130_5472_3283/500.jpg",
awards: [
{
name: "UEFA Men's Player of the Year Award",
year: 2019
},
{
name: "FIFA FIFPro World X",
year: 2019
}
]
}
];
let awarded = players.filter(
player => player.awards.some(
award => award.name === 'FIFA FIFPro World XI'));
console.log(awarded);
Upvotes: 4