我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。
如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)
我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。
如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)
当前回答
这是我发现的一个制作二维数组的快速方法。
function createArray(x, y) {
return Array.apply(null, Array(x)).map(e => Array(y));
}
您还可以轻松地将该函数转换为ES5函数。
function createArray(x, y) {
return Array.apply(null, Array(x)).map(function(e) {
return Array(y);
});
}
为什么这样工作:新的Array(n)构造函数创建了一个带有Array原型的对象。原型,然后分配对象的长度,导致一个未填充的数组。由于它缺乏实际成员,我们不能在它上运行Array.prototype.map函数。
然而,当您向构造函数提供多个参数时,例如执行Array(1,2,3,4)时,构造函数将使用arguments对象正确地实例化和填充Array对象。
因此,我们可以使用Array。apply(null, Array(x)),因为apply函数会将参数分散到构造函数中。为了澄清,执行Array。apply(null, Array(3))等价于执行Array(null, null, null)。
现在我们已经创建了一个实际的填充数组,我们所需要做的就是调用map并创建第二层(y)。
其他回答
Array.from({length: rows}).map(e => new Array(columns));
nodejs + lodash版本:
var _ = require("lodash");
var result = _.chunk(['a', 'b', 'c', 'd', 'e', 'f'], 2);
console.log(result);
console.log(result[2][0]);
输出:
[ [ 'a', 'b' ], [ 'c', 'd' ], [ 'e', 'f' ] ]
e
const arr = new Array(5).fill(new Array(5).fill(0));
console.log(arr);
这里有一个很棒的仓库。
API: masfufa.js 示例:masfufa.html
两个示例将足以理解这个库:
示例1:
/* | 1 , 2 , 3 |
* MX= | 4 , 5 , 6 | Dimensions= 3 x 3
* | 7 , 8 , 9 |
*/
jsdk.getAPI('my');
var A=[1, 2, 3, 4, 5, 6, 7, 8, 9];
var MX=myAPI.getInstance('masfufa',{data:A,dim:'3x3'});
然后:
MX.get[0][0] // -> 1 (first)
MX.get[2][2] // ->9 (last)
示例2:
/* | 1 , 9 , 3 , 4 |
* MXB= | 4 , 5 , 6 , 2 | Dimensions= 2 x 4
*
*/
var B=[1 , 9 , 3 , 4 , 4 , 5 , 6 , 2];
var MXB=myAPI.getInstance('masfufa',{data:B,dim:'2x4'});
然后:
MXB.get[0][0] // -> 1 (first)
MXB.get[1][3] // -> 2 (last)
MXB.get[1][2] // -> 6 (before last)
在一些注释中提到了这一点,但是使用array .fill()将有助于构造一个2-d数组:
function create2dArr(x,y) {
var arr = [];
for(var i = 0; i < y; i++) {
arr.push(Array(x).fill(0));
}
return arr;
}
这将在返回的数组中生成一个长度为x, y的数组。