我怎样才能在JavaScript中创build一个二维数组?

我一直在网上阅读,有些地方说这是不可能的,有些人说是,然后举一个例子,其他人反驳这个例子等等。

  1. 我如何在JavaScript中声明2维数组? (假设可能)

  2. 我将如何访问其成员? ( myArray[0][1]myArray[0,1] ?)

 var items = [ [1, 2], [3, 4], [5, 6] ]; console.log(items[0][0]); // 1 console.log(items); 

您只需将数组中的每个项目都设置为一个数组。

 var x = new Array(10); for (var i = 0; i < 10; i++) { x[i] = new Array(20); } x[5][12] = 3.0; 

与activa的答案类似,这里有一个函数来创build一个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)] 

Javascript只有一维数组,但你可以像其他人一样build立数组的数组。

下面的函数可以用来构造一个固定维数的二维数组:

 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; // ... 

最简单的方法是:

 var myArray = [[]]; 

有人说这是不可能的原因是因为二维数组实际上只是一个数组的数组。 这里的其他注释提供了在JavaScript中创build二维数组的完美有效的方法,但最纯粹的观点是你有一个一维的对象数组,每个对象将是由两个元素组成的一维数组。

所以,这是冲突的观点的原因。

很less有人显示使用推送:
为了带来新的东西,我会告诉你如何初始化matrix的一些值,例如:0或一个空string“”。
提醒,如果你有一个10个元素的数组,在JavaScript中最后的索引将是9!

 function matrix( rows, cols, defaultValue){ var arr = []; // Creates all lines: for(var i=0; i < rows; i++){ // Creates an empty line arr.push([]); // Adds cols to the empty line: arr[i].push( new Array(cols)); for(var j=0; j < cols; j++){ // Initializes: arr[i][j] = defaultValue; } } return arr; } 

用法示例:

 x = matrix( 2 , 3,''); // 2 lines, 3 cols filled with empty string y = matrix( 10, 5, 0);// 10 lines, 5 cols filled with 0 

双内胆:

 var a = []; while(a.push([]) < 10); 

它会生成长度为10的数组a,并填充数组。 (Push将一个元素添加到数组并返回新的长度)

这就是我所取得的成就:

 var appVar = [[]]; appVar[0][4] = "bineesh"; appVar[0][5] = "kumar"; console.log(appVar[0][4] + appVar[0][5]); console.log(appVar); 

最好的答案似乎是

 var nrows = ~~(Math.random() * 10); var ncols = ~~(Math.random() * 10); console.log(`rows:${nrows}`); console.log(`cols:${ncols}`); var matrix = new Array(nrows).fill(0).map(row => new Array(ncols).fill(0)); console.log(matrix); 

二维数组的创build方式与单维数组相同。 你可以像array[0][1]那样访问它们。

 var arr = [1, 2, [3, 4], 5]; alert (arr[2][1]); //alerts "4" 

我不确定是否有人回答了这个问题,但是我发现这对我很有帮助 –

 var array = [[,],[,]] 

例如:

 var a = [[1,2],[3,4]] 

例如,对于2维数组。

最简单的方法是:

 var arr = []; var arr1 = ['00','01']; var arr2 = ['10','11']; var arr3 = ['20','21']; arr.push(arr1); arr.push(arr2); arr.push(arr3); alert(arr[0][1]); // '01' alert(arr[1][1]); // '11' alert(arr[2][0]); // '20' 

要在javaScript中创build二维数组,我们可以先创build一个数组,然后添加数组作为它的元素。 此方法将返回具有给定数量的行和列的二维数组。

 function Create2DArray(rows,columns) { var x = new Array(rows); for (var i = 0; i < rows; i++) { x[i] = new Array(columns); } return x; } 

创build一个Array使用这个方法如下。

 var array = Create2DArray(10,20); 

使用数组理解

在JavaScript 1.7及更高版本中,您可以使用数组parsing来创build二维数组。 您也可以在填充数组时过滤和/或操作条目,而不必使用循环。

 var rows = [1, 2, 3]; var cols = ["a", "b", "c", "d"]; var grid = [ for (r of rows) [ for (c of cols) r+c ] ]; /* grid = [ ["1a","1b","1c","1d"], ["2a","2b","2c","2d"], ["3a","3b","3c","3d"] ] */ 

您可以创build任何您想要的nxm数组,并通过调用填充默认值

 var default = 0; // your 2d array will be filled with this value var n_dim = 2; var m_dim = 7; var arr = [ for (n of Array(n_dim)) [ for (m of Array(m_dim) default ]] /* arr = [ [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], ] */ 

更多的例子和文档可以在这里find。

请注意,这还不是一个标准function

我发现下面是最简单的方法:

 var array1 = [[]]; array1[0][100] = 5; alert(array1[0][100]); alert(array1.length); alert(array1[0].length); 

我不得不做一个灵活的数组函数来为其添加“logging”,并根据需要更新它们,并在将数据发送到数据库进行进一步处理之前进行所需的计算。 这里的代码,希望它可以帮助:)。

 function Add2List(clmn1, clmn2, clmn3) { aColumns.push(clmn1,clmn2,clmn3); // Creates array with "record" aLine.splice(aPos, 0,aColumns); // Inserts new "record" at position aPos in main array aColumns = []; // Resets temporary array aPos++ // Increments position not to overlap previous "records" } 

随意优化和/或指出任何错误:)

Javascript不支持二维数组,而是我们将数组存储在另一个数组中,并根据要访问的数组的位置从数组中获取数据。 记住数组的计数从零开始。

代码示例:

 /* Two dimensional array that's 5 x 5 C0 C1 C2 C3 C4 R0[1][1][1][1][1] R1[1][1][1][1][1] R2[1][1][1][1][1] R3[1][1][1][1][1] R4[1][1][1][1][1] */ var row0 = [1,1,1,1,1], row1 = [1,1,1,1,1], row2 = [1,1,1,1,1], row3 = [1,1,1,1,1], row4 = [1,1,1,1,1]; var table = [row0,row1,row2,row3,row4]; console.log(table[0][0]); // Get the first item in the array 

这是我发现的一个快速的方法来创build一个二维数组。

 function createArray(x, y) { return Array.apply(null, Array(x)).map(e => Array(y)); } 

您也可以轻松将此function转换为ES5function。

 function createArray(x, y) { return Array.apply(null, Array(x)).map(function(e) { return Array(y); }); } 

为什么这样做: new Array(n)构造函数创build一个带有Array.prototype原型的对象,然后分配该对象的length ,导致一个未填充的数组。 由于缺乏实际的成员,我们无法在其上运行Array.prototype.map函数。

但是,当您为构造函数提供多个参数时Array(1, 2, 3, 4)例如,在执行Array(1, 2, 3, 4) ,构造函数将使用arguments对象正确地实例化和填充Array对象。

因为这个原因,我们可以使用Array.apply(null, Array(x)) ,因为apply函数将parameter passing给构造函数。 为了澄清,做Array.apply(null, Array(3))等价于做Array(null, null, null)

现在我们已经创build了一个实际的填充数组,我们只需要调用map并创build第二个图层( y )。

var md = []; for(var i=0; i<5; i++) { md.push(new Array(5).fill(null)); }

创build一个5x5matrix并填充它们为null

您可以分配一个行数组,其中每一行都是一个长度相同的数组。 或者,您可以分配一个具有行*列元素的一维数组,并定义将行/列坐标映射到元素索引的方法。

无论您select哪种实现方式,如果将其包装在对象中,则可以在原型中定义访问器方法以使API易于使用。

我发现这个代码适合我:

 var map = [ [] ]; mapWidth = 50; mapHeight = 50; fillEmptyMap(map, mapWidth, mapHeight); 

 function fillEmptyMap(array, width, height) { for (var x = 0; x < width; x++) { array[x] = []; for (var y = 0; y < height; y++) { array[x][y] = [0]; } } } 

一个简单的例子:

 var blocks = []; blocks[0] = []; blocks[0][0] = 7; 

我的方法与@Bineesh答案非常相似,但是采用更一般的方法。

你可以声明双数组,如下所示:

 var myDoubleArray = [[]]; 

并按以下方式存储和访问内容:

 var testArray1 = [9,8] var testArray2 = [3,5,7,9,10] var testArray3 = {"test":123} var index = 0; myDoubleeArray[index++] = testArray1; myDoubleArray[index++] = testArray2; myDoubleArray[index++] = testArray3; console.log(myDoubleArray[0],myDoubleArray[1][3], myDoubleArray[2]['test'],) 

这将打印预期的输出

 [ 9, 8 ] 9 123 

对于单线恋人Array.from()

 // creates 8x8 array filed with "0" const arr2d = Array.from({ length: 8 }, () => Array.from({ length: 8 }, () => "0")); 

另一个(来自dmitry_romanov的评论)使用Array()。fill()

 // creates 8x8 array filed with "0" const arr2d = Array(8).fill(0).map(() => Array(8).fill("0")); 

我已经对Matthew Crumley的创build一个multidimensional array函数的答案做了修改。 我已经添加了要作为数组variables传递的数组的维度,并且会有另一个variables – value ,它将用于设置multidimensional array中最后一个数组元素的值。

 /* * Function to create an n-dimensional array * * @param array dimensions * @param any type value * * @return array array */ function createArray(dimensions, value) { // Create new array var array = new Array(dimensions[0] || 0); var i = dimensions[0]; // If dimensions array's length is bigger than 1 // we start creating arrays in the array elements with recursions // to achieve multidimensional array if (dimensions.length > 1) { // Remove the first value from the array var args = Array.prototype.slice.call(dimensions, 1); // For each index in the created array create a new array with recursion while(i--) { array[dimensions[0]-1 - i] = createArray(args, value); } // If there is only one element left in the dimensions array // assign value to each of the new array's elements if value is set as param } else { if (typeof value !== 'undefined') { while(i--) { array[dimensions[0]-1 - i] = value; } } } return array; } createArray([]); // [] or new Array() createArray([2], 'empty'); // ['empty', 'empty'] createArray([3, 2], 0); // [[0, 0], // [0, 0], // [0, 0]] 

recursion函数来创build一个multidimensional array:

 var makeArray = function (dims, arr) { if (dims[1] === undefined) { return new Array(dims[0]); } arr = new Array(dims[0]); for (var i=0; i<dims[0]; i++) { arr[i] = new Array(dims[1]); arr[i] = makeArray(dims.slice(1), arr[i]); } return arr; } 

构build一个2x3x4x2 4Darrays:

 var array = makeArray([2, 3, 4, 2]); 

你也可以创build一个函数来创build一个2D数组,像这样:

 var myTable = []; function createArray(myLength) { myTable = new Array(myLength); var cols, rows; for (cols = 0; cols < myLength; cols++) { myTable[cols] = new Array(myLength); } } 

你可以通过使用以下命令来调用它,这会给你一个10×10二维数组。

 createArray(10); 

您也可以使用此方法创build3D数组。

一个class轮创buildam * n二维数组填充0。

 new Array(m).fill(new Array(n).fill(0)); 

如果你在二维数组谷歌图表之后,最好的办法是

 var finalData = []; [["key",value], ["2013-8-5", 13.5], ["2013-7-29",19.7]...] 

指的不是有效的二维数组谷歌图表