【问题标题】:print out elements of sub-array in Javascript在Javascript中打印出子数组的元素
【发布时间】:2014-01-10 09:27:06
【问题描述】:

我不明白如何在 Javascript 中找到子数组的长度。下面是一个练习的例子:

 var table = [
["Person",  "Age",  "City"],
["Sue",     22,     "San Francisco"],
["Joe",     45,     "Halifax"]
];

我尝试使用这些 for 循环单独打印出子数组的元素:

for(person in table) {
    for(var i = 0; i < table[person].length; i++);
        console.log(table[person][i]);
}

但似乎

table[person].length

虽然是无效的语法

table.length 

有效且

table[person][i]

返回子索引 table_person_i 处的元素

【问题讨论】:

  • 我可以向你保证table[person].length 是有效的语法。为什么要用for...in 循环遍历数组?使用for 循环可能会解决您的问题。
  • 在遍历数组时,我更喜欢 for ... in 语法。我正在 Codecademy 上做一个练习,它拒绝了我的语法。它为每一行提供“未定义”。也许这是他们的口译员的问题?
  • table[person].length 将是有效的,如果您在名为 table 的对象中有一个名为 person 的数组。但这不是您拥有的结构 - 上述结构是对数组的一种误解,或者至少是一种奇怪的使用方式。
  • 好吧,你不应该使用for...in 来表示数组是有原因的。见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。仅仅因为 Codecademy 不喜欢你的代码并不意味着它在语法上是无效的。
  • @JAL:您将table[person]table['person'] 混淆了。 person 是一个包含"0""1" 等值的变量。所以你最终会做table["0"].length,与结构完全匹配。它获取table中第一个元素的长度。

标签: javascript arrays


【解决方案1】:

这是一个数组,而不是一个对象,所以你不能使用 for/in 循环。请改用常规的 for 循环。

//for (person in table) {

for (var person = 1; person < table.length; person++) {
    for(var i = 0; i < table[person].length; i++)
    {
        console.log(table[person][i]);
    }
}

【讨论】:

  • 这不是 100% 正确的。您可以使用 for...in 循环(毕竟,数组也是对象),但您不应该
【解决方案2】:

您应该为此任务使用嵌套的for 循环:

for (var i = 0; i < table.length; i++) {
    for (var j = 0; j < table[i].length; j++) {
        console.log(table[i][j]);
    }
}

【讨论】:

  • 谢谢。这行得通,但是有没有办法用 for(key in array) { for (i = 0; t
  • for in 循环通常应该在迭代对象键时使用,因此 for key in 名称
【解决方案3】:

试试这个:

for (var j = 0; j<table.length; j++) 
{
     //j(th) element of table array
     for (var i = 0; i < table[j].length; i++)
     {
         //i(th) element of j(th) element array
         console.log(table[j][i]);
     }
}

【讨论】:

  • 谢谢。这行得通,但是有没有办法用 for(key in array) { for (i = 0; t
  • 数组元素只能通过数字索引访问。您可以将密钥与 js objects 一起使用。 Here is an example
  • @ChrisOchsenreither 你真的应该避免在数组上使用 for-in,这会释放恶魔......和不可靠的数据(即迭代你不期望的数组对象的其他属性)。
  • @Lior 我想这就是存在 Coffeescript 的原因。不过我还是要学JS。
【解决方案4】:

在您的示例中,您的数组是一个数组数组。 获取人名,并根据您的示例:

for (var i = 1; i < table.length; i++)
{
 console.log(table[i][0]); // first element of each sub array
}

【讨论】:

  • 唯一的问题是没有内部for循环来打印出子数组的其他元素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多