Как я могу создать таблицу умножения с заголовками в виде двумерного массива

#javascript #arrays #function #multidimensional-array

Вопрос:

Я хочу создать функцию, которая будет генерировать таблицу умножения со строкой заголовка и столбцом заголовка.

Функция должна принимать 3 аргумента:

  • col — (целое число) начальное значение для чисел в столбцах
  • row — (целое число) начальное значение для чисел в строках
  • size — (целочисленный) размер таблицы

вызов table(1,3,4) должен дать такой результат:

 [ 
    [null, 1, 2, 3, 4], 
    [3, 3, 6, 9, 12], 
    [4, 4, 8, 12, 16], 
    [5, 5, 10, 15, 20], 
    [6, 6, 12, 18, 24] 
] 
 

Обратите внимание, что:

  • Числа в строке заголовка начинаются с 1 (первый аргумент)
  • Числа в первом столбце начинаются с 3 (второй аргумент)
  • Таблица содержит 4 (третий аргумент) строки и столбцы, не являющиеся заголовками, для общего размера 5 строк и столбцов.

До сих пор у меня есть этот код (ниже), но как я могу поместить значения внутрь?

 let table = new Array(  size);
    
for(let i = 0; i < table.length; i  ) {
  table[i] = new Array(size);
}
 

Есть и другие требования, но я не знаю, как их выполнить.

  • table[0] описывает строку с заголовками столбцов
  • table[0][0] всегда null — это будет соответствовать пустой верхней левой ячейке таблицы.
  • table[i][0] описывает заголовок строки (где i находится любой индекс)
  • table[0][j] описывает заголовок столбца (где j находится какой-либо индекс)
  • table[0][1] равно col
  • table[1][0] равно row
  • table[i][j] равно произведению двух чисел: table[i][0] и table[0][j]

Ответ №1:

 function table(col_start, row_start, size){
    let table = new Array(size 1);

    for(let i = 0; i < table.length; i  ) {
        table[i] = new Array(size 1);
    }
    
    table[0][0]=null

    for(let i = 1; i < size 1; i  ) {
        table[0][i] = col_start i-1
    }

    for(let i = 1; i < size 1; i  ) {
        table[i][0] = row_start i-1
    }

    for(let i = 1; i < size 1; i  ) {
        for(let j = 1; j < size 1; j  ) {
            table[i][j] = table[0][j]*table[i][0]
        }
    }
    return table
}```
 

Комментарии:

1. Спасибо за ответ!

Ответ №2:

Прежде всего, JavaScript не предоставляет многомерные массивы. Если вы хотите его создать — вот как вы это делаете (ну, это не будет многомерный массив, но вы можете заставить его работать так).

 function multiDimensional(r,c){  // r = number of rows, c = columns
    const arr = Array.from({length : 5}, ()=>[]); //creates an array with 5 empty arrays in it.
    let count = 0;

    while(count !== r){    //count is index of the empty arrays inside the array.
        for(let i = 0; i < r*c; i  ){    // r*c is size of array.
            arr[count].push(i);      //pushing values inside subarrays. e.g. arr[0].push(0)
           
            if(i !== 0 amp;amp; (i 1) % 5 === 0){  //incrementing count after every 5 loop repetitions
              count  ;
            }
        }
    }
    console.log(arr[1][0]) // now u can use arr[a][b] notation.
    return arr;
}

multiDimensional(5,5);
 

желаемая таблица выглядит так (не забывайте, что массив начинается с 0, поэтому строка 1 на самом деле является строкой 0, то же самое для столбца) —

 arr = [
 [0, 1, 2, 3, 4]  // place value = 00, 01, 02, 03, 04  or simply r0c0, r0c1 etc
 [5, 6, 7, 8, 9]    // place value = 10, 11, 12, 13, 14
 [10, 11, 12, 13, 14]   // place value = 20, 21, 22, 23, 24
 [15, 16, 17, 18, 19]   // place value = 30, 31, 32, 33, 34
 [20, 21, 22, 23, 24]    // place value = 40, 41, 42, 43 44
 ]
 

Комментарии:

1. Спасибо за ответ, это s good solution but it немного сложно понять, когда ты новичок

2. Никаких проблем, чувак. Приходите позже, когда почувствуете, что можете это понять. Тогда это будет понятно.