[...Array(6)].map(x => 0);
// [0, 0, 0, 0, 0, 0]
または
Array(6).fill(0);
// [0, 0, 0, 0, 0, 0]
注:空のスロットはループできません。 Array(4).forEach(() => …)
または
(typescript safe)
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()
が、サイズを指定しても問題ありません。それはすべて、コンテキスト全体のコードの一貫性に帰着すると思います。