[...Array(6)].map(x => 0);
// [0, 0, 0, 0, 0, 0]
要么
Array(6).fill(0);
// [0, 0, 0, 0, 0, 0]
注意:您不能循环空插槽,即 Array(4).forEach(() => …)
要么
(打字稿安全)
Array(6).fill(null).map((_, i) => i);
// [0, 1, 2, 3, 4, 5]
要么
使用函数的经典方法(可在任何浏览器中使用)
function NewArray(size) {
var x = [];
for (var i = 0; i < size; ++i) {
x[i] = i;
return x;
}
}
var a = NewArray(10);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
创建嵌套数组
当直观地创建2D数组时,fill
应创建新实例。但是实际上将要发生的是将同一数组存储为参考。
var a = Array(3).fill([6]);
// [ [6], [6], [6] ]
a[0].push(9);
// [ [6, 9], [6, 9], [6, 9] ]
解
var a = [...Array(3)].map(x => []);
a[0].push(4, 2);
// [ [4, 2], [], [] ]
因此,一个3x2阵列将如下所示:
[...Array(3)].map(x => Array(2).fill(0));
// [ [0, 0], [0, 0], [0, 0] ]
N维数组
function NArray(...dimensions) {
var index = 0;
function NArrayRec(dims) {
var first = dims[0], next = dims.slice().splice(1);
if(dims.length > 1)
return Array(dims[0]).fill(null).map((x, i) => NArrayRec(next ));
return Array(dims[0]).fill(null).map((x, i) => (index++));
}
return NArrayRec(dimensions);
}
var arr = NArray(3, 2, 4);
// [ [ [ 0, 1, 2, 3 ] , [ 4, 5, 6, 7] ],
// [ [ 8, 9, 10, 11] , [ 12, 13, 14, 15] ],
// [ [ 16, 17, 18, 19] , [ 20, 21, 22, 23] ] ]
初始化棋盘
var Chessboard = [...Array(8)].map((x, j) => {
return Array(8).fill(null).map((y, i) => {
return `${String.fromCharCode(65 + i)}${8 - j}`;
});
});
// [ [A8, B8, C8, D8, E8, F8, G8, H8],
// [A7, B7, C7, D7, E7, F7, G7, H7],
// [A6, B6, C6, D6, E6, F6, G6, H6],
// [A5, B5, C5, D5, E5, F5, G5, H5],
// [A4, B4, C4, D4, E4, F4, G4, H4],
// [A3, B3, C3, D3, E3, F3, G3, H3],
// [A2, B2, C2, D2, E2, F2, G2, H2],
// [A1, B1, C1, D1, E1, F1, G1, H1] ]
new Array()
一般方法,但是可以指定大小。我认为一切都取决于整个上下文中的代码一致性。