我一直在网上阅读,有些地方说不可能,有些人说是,然后举个例子,其他人反驳这个例子,等等。
如何在 JavaScript 中声明一个二维数组?(假设有可能)
我将如何访问其成员?(
myArray[0][1]
或myArray[0,1]
?)
我一直在网上阅读,有些地方说不可能,有些人说是,然后举个例子,其他人反驳这个例子,等等。
如何在 JavaScript 中声明一个二维数组?(假设有可能)
我将如何访问其成员?(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)]
Array.from(Array(2), () => new Array(4))
2和4分别是第一维和第二维。
我们正在使用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 数组
n = 10,000
)Array(2).fill(null).map(() => Array(4))
性能下降的原因是我们必须将第一个维度值初始化为 run .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
虽然它确实返回了显然需要的二维数组 ( [ [ <4 empty items> ], [ <4 empty items> ] ]
),但有一个问题:第一维数组已通过引用复制。这意味着 aarr[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]);
Javascript 只有一维数组,但正如其他人指出的那样,您可以构建数组数组。
以下函数可用于构造固定维度的二维数组:
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;
// ...