能分析一下这段代码嘛!谢谢了

games = allgames.filter(g => games.filter(g => g.gameState === '0').map(i => i.gameId).indexOf(g.id) !== -1)

image.png

阅读 1.6k
2 个回答
//提取出games中gameState为'0'的数据
var arr = games.filter(g => g.gameState === '0')
//上面过滤的数据,提取里面的gameId,整合为一个新数组arr
.map(i => i.gameId)

//从allgames中过滤数据,要求是数据的id在上面的arr中,并把过滤得到的数据赋值给games
games = allgames.filter(g => arr.indexOf(g.id) !== -1)

我还原了一下你这个场景哈 以后还是要多写注释 哈哈

let allgames = [
  {
    ...,
    id: '0001'
  }, {
    ...,
    id: '0002'
  }]

let games = [{
  ...,
  gameState: '1',
  gameId: '0003',
  gameName: '魂斗罗'
}, {
  ...,
  gameState: '0',
  gameId: '1',
  gameName: '冒险岛'
}]

games = allgames
  .filter(g => games
    .filter(g => g.gameState === '0')   //跟allgames没有关系,就是单纯的把games里gameState为0的全部过滤出来
    .map(i => i.gameId) //跟allgames没关系,然后把上一步拿到的gameState为0的对象只返回gameId这个字段  返回的格式为 [id1,id2,di3,...]
    .indexOf(g.id) !== -1 //然后把最开始allgames中每一项里的id跟上一步返回的数组做比较,若数组中有allgames中的这一项,则返回
  )


撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题