我知道这是我第一次开始时可能学到的东西,但不记得它是如何完成的,因为我从未使用它。我有一个数组,我正在循环,并没有得到预期的结果。我试图让输出像这样..
一二三四 五六七
但它不断出现 一二三四 一二三四 一二三四 一二三四 一二三四 一二三四 一二三四
有人能告诉我我做错了什么吗?
var arr = [
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
];
for (row = 0; row < arr.length; row++) {
for (col = 0; col < 4; col++) {
document.write(arr[col] + " ");
}
document.write('<br/>');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 0 :(得分:2)
您可以将行数乘以行的大小:
var arr = [
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
];
const rowSize = 4;
for (row = 0; row < arr.length / rowSize; row++) {
const startingIdx = row * rowSize;
for (col = startingIdx; col < arr.length && col < startingIdx + rowSize; col++) {
document.write(arr[col] + " ");
}
document.write('<br/>');
}
答案 1 :(得分:2)
您可以进行一些小修改:
var arr = [
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
];
for (index = 0; index < arr.length; index++) {
document.write(arr[index] + " ");
if ((index + 1) % 4 == 0) {
document.write('<br/>');
}
}
//for (col = 0; col < 4; col++) {
//
// for (row = 0; row < arr.length; row++) {
// document.write(arr[row] + " ");
// }
//
// document.write("\n");
//}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 2 :(得分:1)
for (row = 0, col = 0; row < arr.length; row++, col++) {
if (col == 4) {
col = 0;
document.write('<br/>');
}
document.write(arr[row] + " ");
}
答案 3 :(得分:1)
现在,您正在写入页面的数组元素由当前列(col
)决定,该列在外部循环的每次迭代中连续从1到4。
您希望迭代遍历数组的每个元素,并且每次增长大于列数时,插入换行符。
var arr = [
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
];
for (var index = 0; index < arr.length; index++) {
document.write(arr[index] + " ");
if ((index + 1) % 4 == 0) {
document.write("<br/>");
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这会打印数组的每个元素,当索引(加1,因为数组从0开始,但我们需要从1开始)是4的倍数(意味着已达到行的结尾) ,写入换行符标记以开始下一行元素。
答案 4 :(得分:1)
您不应该使用两个循环,但在必须放置<br/>
时进行测试:您可以使用%
运算符对其进行测试。
for (index = 0; index < arr.length; index++) {
if (index !== 0 && index % 4 === 0) {
document.write('<br/>');
}
document.write(arr[index] + " ");
}
答案 5 :(得分:0)
在每次迭代中,你开始从col
开始(实际上,数组索引)为0:
for (col = 0; col < 4; col++) {
尝试调整原始arr
以考虑所需的结构:
const arr = [
[
"One",
"Two",
"Three",
"Four",
],
[
"Five",
"Six",
"Seven",
"Eight",
]
];
for (let rowIndex = 0; rowIndex < arr.length; rowIndex++) {
const row = arr[rowIndex];
for (let colIndex = 0; colIndex < row.length; colIndex++) {
document.write(row[colIndex] + " ");
}
document.write('<br/>');
}
答案 6 :(得分:0)
我建议阻止多次document.write
次呼叫,因为如果你有更多的数据,它很快就会成为一个痛苦的瓶颈:
var arr = [
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
];
var table = "";
arr.forEach(function (item, i) {
table += item + ((i + 1) % 4 !== 0 ? " " : "<br>");
});
document.write(table);
// One Two Three Four<br>Five Six Seven
此外,如果您对Array.prototype.reduce
有信心(并为跨浏览器转换代码),那么我建议通过将数组缩减为字符串来减少代码:
var table = arr.reduce(
(reduced, item, i) => reduced + item + ((i + 1) % 4 !== 0 ? " " : "<br>")
, ""
);
答案 7 :(得分:0)
使用更多声明性语法可能更容易。您可以将数组的内容减少为字符串,如果要在每个n
元素上添加break标记,可以使用modulus
进行测试以查看reduce循环索引是否与n
。
array reduce方法为函数回调提供了前一个值,下一个值和循环索引。
const arr = [
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
];
const getString = (dataArr, breakOn) => {
return dataArr.reduce((prev, next, index) => {
let str = `${prev} ${next}`;
if (index && index % breakOn === 0) {
str = `${str}<br />`;
}
return str;
}, '');
}
const container = document.getElementById('results');
container.innerHTML = getString(arr, 3);
<div id="results"></div>