2017-08-17 72 views
1

我想从多维打印出一些信息。在这种情况下,它是一个名字,姓氏和出生年份。在Javascript中打印多维数组

但是,当第一个人已经打印出来,代码打破了,我不知道为什么。有些帮助会很棒。

profiler = [ 
 
    ["Jake", "name2", "name3"], 
 
    ["Madsen", "last2", "last3"], 
 
    ["1996-03-09", "year2", "year3"], 
 
]; 
 

 
printProfil(profiler); 
 

 
function printProfil(profiler) { 
 
    var forNavn = ""; 
 
    efterNavn = ""; 
 
    fodselsAr = ""; 
 
    i = 0; 
 

 
    for (i; i <= profiler.length; i++) { 
 
    forNavn = profiler[i][i]; 
 
    efterNavn = profiler[i + 1][i]; 
 
    fodselsAr = profiler[i + 2][i]; 
 
    console.log("Fornavn:", forNavn, "Efternavn:", efterNavn, "Fødsels År:", fodselsAr) 
 
    } 
 
}

+0

我试图的是,这是我碰上 https://gyazo.com/8ca10ea0fa479a4ef96c002599636d35 – JakeTheDane

回答

1

可以探查的第一元件上迭代你将得到所有名称的方式,对应于你可以使用0,1,2作为对应的数组来获取姓氏和日期。如果将会有更多的数组,你可以使用第二个循环。

profiler = 
 
[ 
 
["Jake","name2","name3"], 
 
["Madsen","last2","last3"], 
 
["1996-03-09","year2","year3"], 
 
]; 
 

 
printProfil(profiler); 
 

 
function printProfil(profiler) 
 
{ 
 
var forNavn = ""; 
 
    efterNavn = ""; 
 
    fodselsAr = ""; 
 
    i = 0; 
 

 
for(var i; i < profiler[0].length; i++) 
 
{ 
 
     forNavn = profiler[0][i]; 
 
     efterNavn = profiler[1][i]; 
 
     fodselsAr = profiler[2][i]; 
 
     console.log("Fornavn:", forNavn, "Efternavn:", efterNavn, "Fødsels År:", fodselsAr) 
 
    } 
 
}

+0

谢谢!这工作有一个愉快的一天:) – JakeTheDane

+0

@JakeTheDane欢迎您,考虑接受答案,如果它帮助。干杯! – Dij

+0

@Dij +1输出OP所需结果的唯一答案... – War10ck

2

为什么环路在第一迭代之后崩溃的原因是因为这一行的:

fodselsAr = profiler[i + 2][i]; 

在第二循环中,i等于1 - >i + 2 = 3 ,但profiler只包含3个条目,所以它崩溃。

您需要具有i索引来访问profiler阵列,然后在0,1和2的索引访问条目:

profiler = [ 
 
    ["Jake", "name2", "name3"], 
 
    ["Madsen", "last2", "last3"], 
 
    ["1996-03-09", "year2", "year3"], 
 
]; 
 

 
printProfil(profiler); 
 

 
function printProfil(profiler) { 
 
    var forNavn = ""; 
 
    efterNavn = ""; 
 
    fodselsAr = ""; 
 
    i = 0; 
 

 
    for (i; i < profiler.length; i++) { 
 
    forNavn = profiler[0][i]; 
 
    efterNavn = profiler[1][i]; 
 
    fodselsAr = profiler[2][i]; 
 
    console.log("Fornavn:", forNavn, "Efternavn:", efterNavn, "Fødsels År:", fodselsAr) 
 
    } 
 
}

+0

虽然错误这会输出完整的数组,请密切关注OP希望显示的数据的顺序。在他们的上面的例子中,OP似乎想要一行上的每个数组的第一个元素,然后是一行上每个数组的第二个元素,等等。这个例子输出每个内部数组的内容作为一行输出期望的输出... – War10ck

+0

@ War10ck对不起,我错过了,答案更新。 – Erazihel

+1

不用担心。编辑运作良好。 +1 – War10ck

0

首先,你的循环是不正确的终止条件。您希望在索引等于数组长度时停止迭代,因此您希望在索引小于长度时继续循环。

编辑:让我们自己包括在内,试着理解您使用的数据结构,以便我们确定如何访问您需要的数据。您有一个外部数组,其中包含名字的内部数组,名字的内部数组以及年份的内部数组。每个数组的第一个元素对应于一个对象。所以我们想要并行迭代所有三个内部数组,在每次迭代时从每个数组中获取一个元素。

由于三个内部数组中的每一个都包含来自一组对象的一个​​字段,因此每个数组的长度应该相同。因此,当我们想要迭代任何一个数组时,我们可以使用它们的任何长度来完成它。为了简单起见,我们使用第一个数组。从外部数组中获取内部数组的好方法是使用destructuring assignment。在for循环中,我们一次遍历所有三个内部数组,而不是外部数组。

随着恒定的索引:

const firstNames = profiler[0]; 
const lastNames = profiler[1]; 
const years = profiler[2]; 

for(let i = 0; i < firstNames.length; i++) { 
    const forNavn = firstNames[i]; 
    const efterNavn = lastNames[i]; 
    const fodselsAr = years[i]; 
    console.log("Fornavn:", forNavn, "Efternavn:", efterNavn, "Fødsels År:", fodselsAr); 
} 

随着阵列解构:

const [firstNames, lastNames, years] = profiler; 

for(let i = 0; i < firstNames.length; i++) { 
    const forNavn = firstNames[i]; 
    const efterNavn = lastNames[i]; 
    const fodselsAr = years[i]; 
    console.log("Fornavn:", forNavn, "Efternavn:", efterNavn, "Fødsels År:", fodselsAr); 
} 
+1

您应该查看上面OP的期望输出。此答案不会输出请求的格式... – War10ck