在嵌套的for循环中垂直打印数组。 JAVASCRIPT

时间:2015-11-11 05:22:00

标签: javascript html css arrays for-loop

我希望有人可以帮我找到一种使用嵌套for循环垂直打印数组的方法。例如,我有

enter image description here

显示它应该是什么样子。不是那个数组的所有东西都应该是零并且网格的尺寸是10x10,与我附加的图像不同。

我想知道如何在一个网格(零网格)中打印多个数组,但知道如何垂直打印一个数组足够了!我正在使用javascript。

enter image description here

我很肯定我的方向是错误的。

3 个答案:

答案 0 :(得分:0)

试试这个:

function printGrid(){
	var ships = [[1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5], [1,2,3,4,5,6], [1,2,3,4,5,6,7], [1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8,9]];
	var htmlResult = "";
	var size = 10;
	normalizeArrayForRows(size, ships);
  
	for(var r = 0; r < size; r++){
		
        normalizeArrayForCols(size, ships[r]);
		for(var c = 0; c < size; c++){
			htmlResult += ships[r][c] + " ";
		}
		
		htmlResult += "<br />"
	}
	document.getElementById("grid").innerHTML += htmlResult;
}

function normalizeArrayForRows(size, thearray){
	if (thearray.length < size){
		for(var i = thearray.length; i < size; i++){
			thearray[i] =  [];
		}
	}
}

function normalizeArrayForCols(size, thearray){
	if (thearray.length < size){
		for(var i = thearray.length; i < size; i++){
			thearray[i] = 0;
		}
	}
}


printGrid();
<div id="grid">
  
 </div>

答案 1 :(得分:0)

function start(){
	
	var ships = [[5,5,5,5,5],[4,4,4,4],[3,3,3],[2,2],[3,3,3]];
	var foo = Math.floor(Math.random() * 10 + 1);
		for(var x=0; x<10; x++){
			var lngth = ships.length;
			
			if(lngth<10){
				var p = 10 - lngth;
				var rm = new Array(p);
				for(var i = 0; i<p; i++){
					rm[i] = 0
				}
				ships.push(rm);
			}
			for(var y=0; y<10; y++){
				var lngth1 = ships[x].length;
				alert(lngth1);
				if(lngth1<10){
					var p = 10 - lngth1;
					for(var i = 0; i<p; i++){
						ships[x].push(0);
					}
				}
				document.getElementById("grid").innerHTML += ships[x][y];
			}
			document.getElementById("grid").innerHTML += "</br>";
		}
	}

start();
<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript">
	</script>
	
	<title></title>
</head>
<body>
	<div id="wrapper">
		<h1 id="grid"></h1>
	</div>
</body>
</html>

答案 2 :(得分:-1)

你不一定朝着错误的方向前进。 2嵌套for循环是你想要做的很好的天真实现。

事实上,您已编写的代码中的一小部分更改将以零的矩阵输出一列垂直值:

+= " 0"替换为+= (" " + (x===2 ? "ARRAY".substr(y,1) : "0"))

原始代码的基本思想是遍历每一列,然后遍历该列的每一行。但是,您将在列的每一行中输出零。如果要更改任何特定单元格中的行为,只需添加if语句以检查您是否在正确的行或列中,然后相应地更改打印的值。

在下面的代码片段中,我更改了y和x的顺序;然后在每一行,当在第2列(x===2)时,我告诉它输出单词数组"ARRAY".substr(y,1)的第y个字母。这实现了您在图片中发布的内容:

&#13;
&#13;
    var ships = [[5,5,5,5,5],[4,4,4,4],[3,3,3],[2,2],[3,3,3]];
	var foo = Math.floor(Math.random() * 10 + 1);
	for(var y=0; y<10; y++){
	    document.getElementById("grid").innerHTML += "<br />";
		for(var x=0; x<10; x++){
			document.getElementById("grid").innerHTML += (" " + (x===2 ? ("ARRAY".substr(y,1) || "0") : "0"));
		}
	}
&#13;
<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript">
	</script>
	
	<title></title>
</head>
<body>
	<div id="wrapper">
		<h1 id="grid"></h1>
	</div>
</body>
</html>
&#13;
&#13;
&#13;

如果您想在单元格中打印其他内容,只需更改if语句以根据X和Y值决定要打印的内容。

编辑: 已将"ARRAY".substr(y,1)更改为("ARRAY".substr(y,1) || "0");所以当'&#34; ARRAY&#34;完成打印,它只会打印&#34; 0&#34;对于该栏的其余部分;匹配你的照片。

澄清: (x===2 ? ("ARRAY".substr(y,1) || "0") : "0")是&#34的简写;如果x等于2:输出#34; ARRAY&#34;中的第y个字符。或&#34; 0&#34;如果失败了;否则,IF x不等于2:输出&#34; 0&#34;。