简体   繁体   English

过滤 Map 并减少

[英]Filter, Map and reduce

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.我如何编写 function 来过滤获得特定奖项的球员,例如 FIFA FIFPro World XI 奖项使用方法 map,仅过滤和减少。

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
          }
        ]
      }
    ];

Using Array.filter and Array.some seems to be the easiest way:使用Array.filterArray.some似乎是最简单的方法:

 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);

Using only filter and map .仅使用filtermap

 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM