Javascript - создание функции с двумя аргументами и возвращение 2d массива - PullRequest
1 голос
/ 03 мая 2019

Мне нужно написать функцию, которая принимает два аргумента - строки и столбцы.Назначение этой функции - вернуть 2d массив с заданными числами и строками.Мне нужно вернуть массив с помощью функции.Вот код:

Я новичок, и каждый отзыв будет высоко оценен.: -)

Я проверил StackOverflow, я пытался его погуглить, проверить соответствующие сайты - к сожалению, не повезло

function create2Darray(A) {
            var columns = [];
            var rows = Math.sqrt(A.length);
            for (var i = 0; i < rows; i++) {
                  columns[i] = [];
                  for (var j = 0; j < rows; j++) {
                        columns[i][j] = A[i * rows + j];
                  }
            }
            return columns;
      }

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вы можете использовать Array.from с объектом длины и отображать со вторым параметром внутренние массивы.

const
    getArray = (l, w) => Array.from({ length: l }, (_, i) =>
        Array.from({ length: w }, (_, j) => i * w + j));

console.log(getArray(3, 2));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 03 мая 2019

Ваш вопрос не соответствует коду, который вы пробовали.Кажется, вы хотите конвертировать одномерный массив в 2D массив.Ваш код в порядке.Но проблема в том, что Math.sqrt(A.length); может возвращать float, а i * rows + j станет float, а массив не имеет индексов с плавающей точкой .Просто используйте Math.ceil(), чтобы исправить

function create2Darray(A) {
     var columns = [];
     var rows = Math.ceil(Math.sqrt(A.length));
     for (var i = 0; i < rows; i++) {
        columns[i] = [];
        for (var j = 0; j < rows; j++) {
            columns[i][j] = A[i * rows + j];
        }
    }
    return columns;
}

console.log(create2Darray([1,2,3,4,5,6,7,8]))

Следующие два решения предназначены для функции, которая принимает длину и ширину.

function array(l,w){
  let res = [];
  for(let i = 0; i < l;i++){
    res[i] = [];
    for(let j = 0; j < w; j++){
      res[i][j] = (w * i) + j
    }
  }
  return res;
}
console.log(JSON.strigify(array(3,2)))

А на вкладыше можно сделать с помощью вложенного map()

const array = (l,w) => [...Array(l)].map((x,i) => [...Array(w)].map((x,j) => (i*w) + j))
console.log(JSON.stringify(array(3,2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...