Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中创建二维零数组?_Javascript_Multidimensional Array - Fatal编程技术网

如何在javascript中创建二维零数组?

如何在javascript中创建二维零数组?,javascript,multidimensional-array,Javascript,Multidimensional Array,有没有一种简单的方法可以通过编程在javascript中创建2d数组 我不想要的: var array2D = [ [0,0,0], [0,0,0], [0,0,0] ] 您可以编写一个助手函数: function zeros(dimensions) { var array = []; for (var i = 0; i < dimensions[0]; ++i) { array.push(dimensions.length == 1 ?

有没有一种简单的方法可以通过编程在javascript中创建2d数组

我不想要的:

var array2D = [ 
  [0,0,0],
  [0,0,0],
  [0,0,0]
]

您可以编写一个助手函数:

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]]
函数零点(尺寸){
var数组=[];
对于(变量i=0;i<尺寸[0];++i){
array.push(dimensions.length==1?0:0(dimensions.slice(1));
}
返回数组;
}
>零([5,3]);
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
奖励:处理任意数量的维度。

解决方案2017:
function zero2D(rows, cols) {
  var array = [], row = [];
  while (cols--) row.push(0);
  while (rows--) array.push(row.slice());
  return array;
}
虽然派对迟到了,但这篇文章在谷歌搜索结果中仍然占据很高的位置

要创建具有给定大小(适用于更多尺寸)的空二维阵列,请执行以下操作: 预填充二维数组: 例如:

警告:
Array(rows).fill(Array(columns))
将导致所有行都是对同一数组的引用


2018年9月24日更新(感谢@Tyler): 另一种可能的方法是使用
Array.fill()
应用map函数

例如:


基准:

您可以使用以下函数创建一个二维零数组:

constzeros=(m,n)=>[…数组(m)].map(e=>Array(n).fill(0));
console.log(零(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 ]
// ]
函数twoDarrMaker(行、列){
常数twoDarr=[];
for(设i=0;i
item
更改为lambda,该lambda是项目的工厂。这可以写得更清楚。通常,在编写递归函数时,应该确保基本情况和归纳情况易于识别。在上面的代码中,两者位于同一行——非常混乱。相反,我建议您检查函数顶部的
dimensions.length==1
条件,并为循环创建两个
,一个创建0数组(基本情况),另一个创建带有
函数调用的数组(归纳情况)。虽然生成的代码会更加冗长,但也不会那么混乱。回答不错。使用
Array.from({length:rows},()=>Array(columns.fill(value))而不是
Array.from(数组(行),=>Array(列).fill(值))
将避免创建空数组。但是我不确定哪一个更快。Richard Natal很好地为我更新了jsperf测试,所以我只更新jsperf链接。对我来说,
[…Array(1000)].map(e=>Array(1000).fill(0))方法是最快的,紧随其后的是for循环变量。请不要在没有解释的情况下发布代码作为答案。试着解释一下你的代码是做什么的,以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
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.from(Array(2), _ => Array(3).fill(43));
// Result:
// [[43, 43, 43],
//  [43, 43, 43]]
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 ]
// ]