var table = document.createElement("table");
function buildTableArray(n) {
var arr = [];
for (var i = 0; i < n; i++) {
arr[i] = table.insertRow(i);
for (var j = 0; j < n; j++) {
arr[i][j] = arr[i].insertCell(j);
}
}
return arr;
}
function freeCells(array) {
var arr = [];
var k = 0;
var l = array.length;
for (var i = 0; i < l; i++) {
for (var j = 0; j < l; j++) {
arr[k] = `${i} ${j}`;
k++;
}
}
return arr;
}
function checkCell(array, i, j) {
var pattern = `${i} ${j}`;
if (array.indexOf(pattern)) {
array.splice(array.indexOf(pattern), 1);
return true;
}
return false;
}
function buildTable(n, i, j, array) {
for (let k = 1; k <= Math.pow(n, 2); k++) {
console.log(array);
array[i][j].innerHTML = k;
if (checkCell(array, i - 1, j)) i--;
if (checkCell(array, i + 1, j)) i++;
if (checkCell(array, i, j - 1)) j--;
if (checkCell(array, i, j + 1)) j++;
}
}
var build = buildTableArray(2);
console.log(buildTable(2, 0, 1, build));
доброго времени суток! нужно запомнить таблицу числами определенным образом. функции написал, проверяю на логе работу функции buildTable, а там таблица непонятно как выводится
притом что если вывести таблицу чисто, вне функции, все выводится как нужно. подскажите пожалуйста в чем проблема?
В коде перемешаны 2 концепции: массив данных и таблица.
Тут в элемент массива записывается ссылка на узел строки таблицы. Наверное ты хотел записать массив чтобы потом наполнить его ссылками на созданные td. В консоли видно то что я описываю: массив из tr.
А потом в свойство этого узла записывается ссылка на созданную ячейку.
Код выглядит как будто он должен выдавать на выходе массив массивов типа
[[td, td, td],
[td, td, td]]
Непонятна задача функции freeCells. Потому что array будет двумерным но не гарантированно “квардатным” (одинаковое количество рядов и строк), а код написан как будто массив “квадратен”.
Если распишешь какова задумка каждой функции, я смогу подсказать что в них не так.
функция buildTableArray создает одновременно таблицу и вносит ячейки в переменные. функция freeCells создает массив индексов свободных ячеек. функция checkCell проверяет введенные индексы на существование в массиве, который создала функция freeCells, и если существует, удаляет элемент массива с этими индексами. функция buildTable заполняет массив buildTableArray значениями
расскажу по-русски как это все должно работать. создается таблица n x n. она заполняется значениями от 1 до n^2 так чтобы каждая ячейка с значениями х и х-1 имела общую сторону и выглядит это примерно так:
хорошо, изменил. на будущее буду так и делать. это также решило проблему во второй функции, ибо мне приходилось делать фиксированное кол-во строк/столбцов. потому что не видело ячеек
ну. программа все выводит как надо, да. только индексы я не пойму как оно меняет. посмотри на лог выше. по условию же индексы должны совпадать с ячейками массива, и только тогда присваиваться. но в логе невооруженным глазом видно, что свободна только ячейка [0][0], и при этом программа декременирует j, а не i. и массив идет в никуда
вот этот момент мне не понятен. да и если увеличить n, массив проходит такой же путь
По этой теме: всего 5 значений, которые считаются как false в условиях, циклах итд: false, null, undefined, 0, NaN.
И быстрый способ проверить будет ли условие воспринимать значение как false, это взять двойное отрицание значения. Если результат true, то и программа будет вести себя будто значение true. Это еще называют falsy-значения и truthy-значения.