[javascript] JavaScript로 2 차원 배열을 만들려면 어떻게해야합니까?
나는 온라인에서 읽었으며 일부 장소는 불가능하다고 말하고 일부는 예라고 말하고 다른 사람들은 예를 반박합니다.
-
JavaScript로 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 차원 배열입니다.
이것이 충돌하는 견해의 원인입니다.