


Баг при выполнении цикла в js
добрый день у меня возник такой баг:
Мне нужно сгенерировать массив в котором будут еще массивы а в них рандомные числа количество которых должно быть ровно количеству массивов в главном массиве (что то в роде матрицы) количество чисел и массивов даем с помощью prompt а после чего отобразить этот массив в консоли, потом сделать дубликат этого массива и в дубликате стереть числа по обоим диагоналям и так же отобразить в консоли
var x = prompt("mutqagreq matrici erkarutyuny", 5);
var arr = [];
for(let i = 0; i < x; i++){
arr[i] = [];
for(let j = 0; j < x; j++){
arr[i][j] = Math.floor(Math.random() * (20 - 0) + 0);
}
}
console.log(arr);
console.log("------------------------------------");
var array = arr;
for(let g = 0; g < x; g++){
for(let l = 0; l < x; l++){
if(g == l){
array[g][l] = " ";
array[g][(x-1)-l] = " ";
}
}
}
console.log(array)
проблема в том что первый массив отображается не корректно (точнее при выполнении второй части стираются диагонали не у второго массива а у обоих)
пожалуйста помогите понять почему так получается
Ну вообще, у тебя во второй раз зачем-то используется два цикла... это приводит к тому, что итерируется не только первый уровень, но и второй, что здесь ни к чему.
Тебе нужно просто создать переменную буфер равную 0 и на каждой итерации по родительскому массиву прибавлять +1... эта переменная будет индексом при удалении или замене элементов по диагонали. Что-то вроде такого, если я правильно понял.
const rand = () => Math.floor(Math.random() * (99 - 1 + 1) + 1);
let count = +prompt('Введите количество чисел:');
let matrix = [];
let index = 0;
for (let a = 0; a < count; a++) {
for (let b = 0; b < count; b++) {
if (matrix[a]) matrix[a].push(rand());
else matrix.push([rand()]);
}
}
for (let k of matrix) {
delete k[index];
index += 1;
}
console.log(matrix);
