[javascript] JavaScript로 2 차원 배열을 만들려면 어떻게해야합니까?

나는 온라인에서 읽었으며 일부 장소는 불가능하다고 말하고 일부는 예라고 말하고 다른 사람들은 예를 반박합니다.

  1. JavaScript로 2 차원 배열을 어떻게 선언합니까? (가능하다고 가정)

  2. 회원에게 어떻게 액세스합니까? ( myArray[0][1]또는 myArray[0,1]?)



답변

var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];
console.log(items[0][0]); // 1
console.log(items[0][1]); // 2
console.log(items[1][0]); // 3
console.log(items[1][1]); // 4
console.log(items);


답변

단순히 배열 내의 각 항목을 배열로 만듭니다.

var x = new Array(10);

for (var i = 0; i < x.length; i++) {
  x[i] = new Array(3);
}

console.log(x);


답변

activa의 답변과 유사하게 다음은 n 차원 배열을 만드는 함수입니다.

function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

createArray();     // [] or new Array()

createArray(2);    // new Array(2)

createArray(3, 2); // [new Array(2),
                   //  new Array(2),
                   //  new Array(2)]


답변

Javascript에는 1 차원 배열 만 있지만 다른 배열에서 지적한 것처럼 배열 배열을 작성할 수 있습니다.

고정 차원의 2 차원 배열을 구성하는 데 다음 함수를 사용할 수 있습니다.

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

열 수는 사용하기 전에 배열의 크기를 지정할 필요가 없기 때문에 실제로 중요하지 않습니다.

그런 다음 전화를 걸 수 있습니다.

var arr = Create2DArray(100);

arr[50][2] = 5;
arr[70][5] = 7454;
// ...


답변

가장 쉬운 방법 :

var myArray = [[]];


답변

빈 2 차원 배열을 만드는 방법 (한 줄)

Array.from(Array(2), () => new Array(4))

2와 4는 각각 1 차원과 2 차원입니다.

우리는 Array.from배열과 같은 매개 변수와 각 요소에 대한 선택적 매핑을 취할 수있는를 사용하고 있습니다.

Array.from (arrayLike [, mapFn [, thisArg]])

var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);

동일한 트릭을 사용하여 1 … N을 포함하는 JavaScript 배열만들 수 있습니다.


또는 (하지만 더 비효율적 인 12 % n = 10,000)

Array(2).fill(null).map(() => Array(4))

성능 저하는 실행하기 위해 첫 번째 차원 값을 초기화해야한다는 사실과 함께 발생합니다 .map. 그 기억 Array은을 통해 그것을 주문할 때까지 위치를 할당하지 않습니다 .fill또는 직접 값 할당.

var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);


후속 조치

다음은 올바르게 보이지만 문제 가있는 방법입니다 .

 Array(2).fill(Array(4)); // BAD! Rows are copied by reference

분명히 원하는 2 차원 배열 ( [ [ <4 empty items> ], [ <4 empty items> ] ])을 반환하지만 캐치가 있습니다. 첫 번째 차원 배열은 참조로 복사되었습니다. 즉, arr[0][0] = 'foo'실제로 하나가 아니라 두 개의 행이 변경됩니다.

var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);


답변

일부 사람들이 불가능하다고 말하는 이유는 2 차원 배열이 실제로는 배열의 배열이기 때문입니다. 여기에있는 다른 의견은 JavaScript에서 2 차원 배열을 만드는 완벽하게 유효한 방법을 제공하지만 가장 순수한 관점은 1 차원 객체 배열을 갖는 것입니다. 각 해당 객체는 2 요소로 구성된 1 차원 배열입니다.

이것이 충돌하는 견해의 원인입니다.