#javascript #multidimensional-array
#javascript #многомерный массив
Вопрос:
Я пытаюсь напечатать настольную игру под названием snake and ladders. Мне удалось напечатать только первый простой столбец.
var multiArray=[[" ___","| |", "| |","|___|"],
["| |","| |", "|___|","| |"],
["| E |", "|___|","| |","| |"],
["|___|","| |","| |","|___|"],
["| |","| |","|___|","| |"],
["| P |","|___|","| |","| |"],
["|___|"]];
for(var i=0; i<multiArray.length;i ){
for(var j=0; j<multiArray[i].length;j ){
print(multiArray[i][j]);
}
}
Выполнение:
___
| |
| |
|___|
| |
| |
|___|
| |
| E |
|___|
| |
| |
|___|
| |
| |
|___|
| |
| |
|___|
| |
| P |
|___|
| |
| |
|___|
Как я могу сделать это так, чтобы один и тот же столбец печатался еще 7 раз рядом с ним, чтобы выглядеть следующим образом:
___ ___
| | |
| | |
|___|___|
| | |
| | |
|___|___|
| | |
| E | |
|___|___|
| | |
| | |
|___|___|
| | |
| | |
|___|___|
| | |
| | |
|___|___|
| | |
| P | |
|___|___|
| | |
| | |
|___|___|
Я пытался использовать .concat, но он просто добавляет его в нижнюю часть другого столбца. .join и .push также не работают, если я не использую их неправильно.
Комментарии:
1. Где отображаются эти строки? Если это браузер, вы могли бы использовать html и CSS для определения расположения столбцов и добавления текста каждого столбца по отдельности. Если вы печатаете на консоли, вы должны печатать по строкам.
2. я использую школьный веб-сайт под названием codeboot.org
Ответ №1:
Один из способов, который я могу придумать, заключается в следующем
var multiArray =
[
[" ____", "| |", "| |", "|___|"],
["| |", "| |", "|___|", "| |"],
["| E |", "|___|", "| |", "| |"],
["|___|", "| |", "| |", "|___|"],
["| |", "| |", "|___|", "| |"],
["| P |", "|___|", "| |", "| |"],
["|___|"]
];
for (var i = 0; i < multiArray.length; i ) {
for(var j = 0; j < multiArray[i].length; j ){
// storing the second column. first col = second col
var secondColumn = multiArray[i][j];
// checking if the column has E or P in it
if (secondColumn.match(/(E|P)/)) {
// if it does, change the column to empty one
secondColumn = "| |";
}
// print the same column twice (without E or P)
console.log(multiArray[i][j] secondColumn);
}
}
Поскольку вы хотите напечатать один и тот же столбец дважды, но без буквы E или P, простое регулярное выражение решит проблему.
Если вы хотите использовать это на html-странице, а не в консоли или ‘codeboot.org ‘, у вас возникнут проблемы с вашими столбцами. Вы не можете использовать несколько пробелов в строке. HTML-страница будет анализировать его как единый пробел. Вам нужно заменить пробелы с помощью amp;nbsp;
. amp;nbsp;
означает один пробел. Вы можете использовать это несколько раз.
Вы можете увидеть проблему с пространством здесь: fiddle.
РЕДАКТИРОВАТЬ: Вы сказали, что хотите распечатать это 7 раз. Подойдет приведенный ниже код.
for (var i = 0; i < multiArray.length; i ) {
for(var j = 0; j < multiArray[i].length; j ){
var col = multiArray[i][j];
if (col.match(/(E|P)/)) {
col = "| |";
}
console.log(multiArray[i][j] col col col col col col);
}
}
Я не знаю, что означает E или P, поэтому остальные столбцы пусты.
ПРАВКА2:
Если вы хотите добавить в столбцы текущий код или удалить из них, это может вызвать проблемы. Обращение к нужному столбцу было бы затруднительным, поскольку столбцы не организованы. Я даю вам альтернативный способ.
<div id="container"></div>
var container = document.getElementById("container");
var rows = 7;
var cols = 8;
for (var i = 0; i < rows; i ) {
container.innerHTML = '<div class="row"></div>';
var curRow = container.getElementsByClassName("row")[i];
for (var j = 0; j < cols; j ){
curRow.innerHTML = '<div class="col"></div>';
}
}
function addPlayer(p ,r, c) {
var row = container.getElementsByClassName("row")[r-1];
var col = row.getElementsByClassName("col")[c-1];
col.innerHTML = p;
}
function clearColumn(r, c) {
var row = container.getElementsByClassName("row")[r-1];
var col = row.getElementsByClassName("col")[c-1];
col.innerHTML = "";
}
// try passing player name, row number and column number
// in the given order
addPlayer("E", 3, 4);
addPlayer("P", 5, 2);
// you can also clear a specified column
// enter row number and column number
// clearColumn(5,2);
Вам следует создать свою собственную HTML-страницу и работать с HTML / CSS, если вы хотите улучшить это. Онлайн-переводчик не сильно поможет.
Вы можете посмотреть живую демонстрацию здесь: fiddle.
Комментарии:
1. да, я хотел бы напечатать следующие 7 столбцов, но в них разные буквы. допустим, что игрок 1 находится в первой строке столбца 3. тогда мне пришлось бы xenter p1 в этом месте.
2. @user3268216 обновил мой ответ. Это должно решить ваши проблемы.
Ответ №2:
Возможно, было бы проще распечатать доску по строкам, а не по столбцам. Таким образом, вы используете проблему с возможностью печати только ниже в качестве решения, намеренно печатая каждую строку под предыдущей строкой.
Для этого потребуется переопределить ваш многомассив, но первая строка может выглядеть примерно так:
var upperBound = ' _______________________'
var side = '| | | | | | | | | '
var bottomBound = '|__|__|__|__|__|__|__|__|'
console.log(upperBound, 'n', side, 'n', bottomBound)
Затем вы могли бы повторить это еще 7 раз (без верхней границы) и получить свою доску!
console.log(upperBound, 'n', side, 'n', bottomBound)
for(var i = 0; i < 7; i ){
console.log(side, 'n', bottomBound)
}
Надеюсь, это поможет!
Комментарии:
1. разве все не изменилось бы, если бы я хотел ввести что-то в поля? так как в строках или столбцах не поместится
2. Ну, вроде того, но это было бы то же самое в случае печати столбцов. Чтобы ввести что-то в поле, вы могли бы просто убрать один из пробелов.