【发布时间】:2011-04-11 00:48:33
【问题描述】:
有没有一种简单的方法可以在 javascript 中以编程方式创建二维数组?
我不想要的:
var array2D = [
[0,0,0],
[0,0,0],
[0,0,0]
]
【问题讨论】:
标签: javascript multidimensional-array
有没有一种简单的方法可以在 javascript 中以编程方式创建二维数组?
我不想要的:
var array2D = [
[0,0,0],
[0,0,0],
[0,0,0]
]
【问题讨论】:
标签: javascript multidimensional-array
好吧,你可以写一个辅助函数:
function zeros(dimensions) {
var array = [];
for (var i = 0; i < dimensions[0]; ++i) {
array.push(dimensions.length == 1 ? 0 : zeros(dimensions.slice(1)));
}
return array;
}
> zeros([5, 3]);
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
奖励:处理任意数量的维度。
【讨论】:
item 更改为作为项目工厂的 lambda。
dimensions.length === 1 条件,并创建两个 for 循环——一个创建一个 0 数组(基本情况),一个创建一个带有 @ 的数组987654325@ 函数调用(归纳案例)。虽然生成的代码会更冗长,但它的混乱程度要小得多。
function zero2D(rows, cols) {
var array = [], row = [];
while (cols--) row.push(0);
while (rows--) array.push(row.slice());
return array;
}
【讨论】:
迟到了,但这篇博文仍然在 Google 搜索结果中排名靠前。
let array = Array(rows).fill().map(() => Array(columns));
let array = Array(rows).fill().map(() => Array(columns).fill(0));
例如:
Array(2).fill().map(() => Array(3).fill(42));
// Result:
// [[42, 42, 42],
// [42, 42, 42]]
Array(rows).fill(Array(columns)) 将导致所有行都引用同一个数组!!
另一种可能的方法是使用Array.fill() 来应用地图功能。
例如:
Array.from(Array(2), _ => Array(3).fill(43));
// Result:
// [[43, 43, 43],
// [43, 43, 43]]
【讨论】:
Array.from({ length: rows }, () => Array(columns).fill(value)); 而不是 Array.from(Array(rows), _ => Array(columns).fill(value)); 可以避免创建空数组。但我不确定哪个更快。
[...Array(1000)].map(e => Array(1000).fill(0)); 方法是最快的,紧随其后的是 for 循环变体。
您可以使用以下函数来创建 2D 零数组:
const zeros = (m, n) => [...Array(m)].map(e => Array(n).fill(0));
console.log(zeros(3, 4));
// [ [ 0, 0, 0, 0 ],
// [ 0, 0, 0, 0 ],
// [ 0, 0, 0, 0 ] ]
【讨论】:
简单易懂的初学者方法:
function twoDarrMaker(row, col) {
const twoDarr = [];
for (let i = 0; i < row; i++) {
let subarray = [];
for (let j = 0; j < col; j++) {
subarray.push(0);
}
twoDarr.push(subarray);
}
return twoDarr;
}
twoDarrMaker(3, 2);
// [
// [ 0, 0 ],
// [ 0, 0 ],
// [ 0, 0 ]
// ]
编辑:这是我的代码的解释。您创建一个数组twoDArr 来保存二维数组或数组数组。您使用外部 for 循环来创建子数组。然后使用内部 for 循环向子数组添加零。然后将子数组添加到外部数组twoDarr。然后,无论外部 for 循环指定多少次,都重复该过程。当外部 for 循环完成后,返回二维数组。
基本上,外部 for 循环创建行(子数组),而内部 for 循环创建列(子数组中的元素)。外部 for 循环告诉您通过重复块中的代码 x 次来创建 x 行(子数组),内部 for 循环告诉您通过重复块中的代码来创建 y 列(元素) y次。
【讨论】: