Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Баг при выполнении цикла в js

добрый день у меня возник такой баг:
Мне нужно сгенерировать массив в котором будут еще массивы а в них рандомные числа количество которых должно быть ровно количеству массивов в главном массиве (что то в роде матрицы) количество чисел и массивов даем с помощью prompt а после чего отобразить этот массив в консоли, потом сделать дубликат этого массива и в дубликате стереть числа по обоим диагоналям и так же отобразить в консоли

123456789101112131415161718192021222324
 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... эта переменная будет индексом при удалении или замене элементов по диагонали. Что-то вроде такого, если я правильно понял.

12345678910111213141516171819
 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);