You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中根据嵌套值过滤数组并仅保留目标嵌套元素

解决方案:精准过滤嵌套数组中的指定元素

你的问题在于,filter配合some确实能帮你找出包含活跃玩家的国家,但它不会帮你清理掉那些无关的游戏和非活跃玩家——它只是原封不动地保留了整个国家对象的结构。要实现你想要的精准过滤,我们需要逐层处理嵌套结构,每一层都只保留符合条件的元素。

完整实现代码

const arrayData = [
  {
    country: "Country X",
    games: [
      {
        gameTitle: 'Game1',
        players: [{ name: 'John', status:'Active' },{ name: 'Rob', status:'Suspended' }]
      },
      {
        gameTitle: 'Game2',
        players: [{ name: 'Saly', status:'Blocked' }]
      },
    ]
  },
  {
    country: "Country Y",
    games: [
      {
        gameTitle: 'Game1',
        players: [{ name: 'Sindy', status:'Pending' },{ name: 'someone', status:'Rejected' }]
      },
      {
        gameTitle: 'Game2',
        players: [{ name: 'Alex', status:'New' },{ name: 'Nic', status:'Old' }]
      },
    ]
  },
];

const output = arrayData
  .map(country => {
    // 第一步:处理每个国家的游戏列表
    const filteredGames = country.games
      .map(game => {
        // 过滤当前游戏中status为Active的玩家
        const activePlayers = game.players.filter(player => player.status === 'Active');
        // 只有当该游戏存在活跃玩家时,才保留这个游戏(并更新players数组)
        return activePlayers.length > 0 ? { ...game, players: activePlayers } : null;
      })
      // 去掉没有活跃玩家的游戏项
      .filter(game => game !== null);

    // 第二步:只有当该国家存在符合条件的游戏时,才保留这个国家对象
    return filteredGames.length > 0 ? { ...country, games: filteredGames } : null;
  })
  // 去掉没有符合条件游戏的国家
  .filter(country => country !== null);

console.log(output);

代码逻辑说明

我们通过三层过滤/映射来实现精准筛选:

  • 玩家层过滤:对每个游戏的players数组,只保留status === 'Active'的玩家
  • 游戏层过滤:只保留那些包含活跃玩家的游戏(过滤掉没有符合条件玩家的游戏)
  • 国家层过滤:只保留那些包含符合条件游戏的国家(过滤掉没有符合条件游戏的国家)

运行结果

执行上述代码后,你会得到完全符合预期的结果:

[
  {
    "country": "Country X",
    "games": [
      {
        "gameTitle": "Game1",
        "players": [{"name": "John", "status": "Active"}]
      }
    ]
  }
]

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 03:42:46