【问题标题】:JavaScript Looping in Nested Array (newbie)嵌套数组中的 JavaScript 循环(新手)
【发布时间】:2020-01-29 22:10:00
【问题描述】:

我是一名初学者,在观看 Colt Steele 在 Udemy 上的 Web Dev Bootcamp 视频后,我决定进一步探索 JavaScript。想了解更多关于通过嵌套数组更好地查询的信息。我今天早上写了下面的语法,想看看我是否可以使用我制作的循环将与每个玩家有关的“数字”保存在循环之后的变量中?让我知道您的专业人士的想法!我也愿意学习您建议我采取的任何方法或课程,以进一步提高我的编码技能!

下面的函数仅从 Players 变量中声明的数组中打印出每个单独的参数。我想使用该结果仅在循环后将数字定位为“var”。抱歉,如果这没有任何意义,但我觉得必须有办法做到这一点哈哈

var players = [[["Lebron James","23"],["Kevin Durant","35"]],
           [["Dwayne Wade","3"],["Russell Westbrook","0"]]];

function loop(){
  for(var i=0; i<players.length;i++){
    for (var k=0; k<players[i].length; k++){
    for (var m=0; m<players[i][k].length; m++){
          console.log(players[i][k][m])
      }
    }
  }
}

【问题讨论】:

  • 当然有很多方法可以做到这一点。你希望你的变量最后包含什么?你想创建一个像 [23, 35, 3, 0] 这样的数组吗?
  • 所以现在整个函数正在打印出来:Lebron, 35, Kevin Durant, 35.. 等等,而不是控制台日志(我只是想控制台日志看看我的迭代是否工作,这是因为它似乎循环到数组的每个索引中)。但我想提取数字并将它们存储在一个变量中,作为练习。
  • 只是不清楚你想要的结果是什么。
  • 抱歉,我之前输入的速度太快了,哈哈。基本上不是 console.log。我想通过使用我制作的所有循环将与每个玩家相关的数字提取到一个变量中。听起来很有趣,我知道..大声笑。想知道专业人士是如何做到的。哈哈
  • 当然,但是当您说“变量”时,您想到的是什么?你想要一个包含“232530”的变量(数字都拼在一起)吗?你想要一个包含四个数字的数组变量吗?你也需要保留名字吗?

标签: javascript arrays multidimensional-array


【解决方案1】:

您只想从该数组中获取数字?然后你就差不多了。

声明一个空数组const numbers = [],然后在你的内部循环中添加一个数字。元素players[i][k] 是一个玩家的数组[name, number]。所以players[i][k][1] 是你想要的号码。将其推送到您的 numbers 数组中

function loop(){
  for(var i=0; i<players.length;i++){
    for (var k=0; k<players[i].length; k++){
       numbers.push(players[i][k][1])
    }
  }
}

您可以在数组上使用forEach 循环来代替for(...) 循环

players.forEach(group => {
   group.forEach(player => {
      numbers.push(player[1])
   })
})

希望有帮助!

【讨论】:

  • 嗨迈克尔,谢谢您的回复。我一直在尝试你的想法,但不幸的是,当我运行它时,它只给了我 23 号。我可能比它应该做的更难。但我想尝试在重度嵌套的数组中指定特定值会起作用..我还在玩..部分进展对吗?哈哈
【解决方案2】:

虽然这可能有点遥遥无期,但它仍然可能对您以后有用。数组有许多方法可以遍历其中的所有项目。每种方法都有不同的目的和结果。

我已尝试使其尽可能短,并使用flatMapmap 使其工作。

const numbers = players.flatMap(group => group.map(player => player[1]));

或者更冗长的写法:

const numbers = players.flatMap(function(group) {
  return group.map(function(player) {
    return player[1];
  });
});

map 循环遍历数组中的所有项并创建一个新数组,该数组具有相同数量的键,但具有已由回调函数返回的新值。

flatMap 的作用相同,但本质上是mapflat 的组合。 flat 可以将带有例如[['hey'],['bye']] 的数组转换为['hey', 'bye']。删除数组深度级别并获取同一数组中的所有值。

这两种方法都将它们的值返回到一个新数组中。所以下面的行从数组中提取值并将它们存储在number 变量中。或者在这种情况下保持不变。

继续练习并尝试所有方法。他们真的可以帮助使使用数组变得更加容易。查看the docs of MDN 了解您有哪些选择。

【讨论】:

  • 谢谢 Emiel - 感谢资深人士的回复。我可能比它应该做的更难,但我尽我所能不使用除了典型的“for”循环之外的任何其他方法来遍历嵌套数组以获取每个玩家的数字。使用 NBA 球员的数据有点尴尬,但对我来说这是直接的练习方法。我也将阵列拆分为 KD 和 Lebron 作为顶级阵列,这让我更想循环通过它哈哈!
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-05-12
  • 1970-01-01
相关资源
最近更新 更多