如何在javascript中初始化4d数组?
这是我的密码:如何在javascript中初始化4d数组?,javascript,arrays,multidimensional-array,initialization,Javascript,Arrays,Multidimensional Array,Initialization,这是我的密码: var arr = [[[[[]]]]]; var c = 20; for (i=0;i<5;i++) arr[i][0][0][0] = c; alert(arr[2][0][0][0]); var-arr=[; var c=20; 对于(i=0;i使用5个嵌套数组创建数组: var arr = [[[[[]]]], [[[[]]]], [[[[]]]], [[[[]]]], [[[[]]]], [[[[]]]]]; var c = 20; for (i=0;i
var arr = [[[[[]]]]];
var c = 20;
for (i=0;i<5;i++)
arr[i][0][0][0] = c;
alert(arr[2][0][0][0]);
var-arr=[;
var c=20;
对于(i=0;i使用5个嵌套数组创建数组:
var arr = [[[[[]]]], [[[[]]]], [[[[]]]], [[[[]]]], [[[[]]]], [[[[]]]]];
var c = 20;
for (i=0;i<5;i++)
arr[i][0][0][0] = c;
alert(arr[2][0][0][0]);
请注意,如果您创建非常大的数组(例如,createndimmensionarray(51000)
),这样的初始化可能会非常慢
如果希望设置每个标注的长度,可以修改以前的解决方案,如下所示:
function createNDimensionalArray(dims) {
return dims.length === 1
? new Array(dims[0])
: Array.apply(null, Array(dims[0])).map(createNDimensionalArray.bind(null, dims.slice(1)));
}
var arr = createNDimensionalArray([2, 3, 4, 5]);
console.log(arr); // creates 4-dimensional array 2x3x4x5
arr.forEach(function(e) { e[0][0][0] = c })
它不起作用,因为您没有指定第一个元素以外的任何元素,所以数组的长度为1,访问其他键是不正确的
我认为,最方便的方法是在每次迭代中推出一个内置c
的新3d阵列(实际上我不知道你想用这个xD实现什么):
var arr=[];
var c=20;
for(i=0;i这里的大多数人都在使用for循环,我认为在JavaScript匿名函数的时代,这些循环大多已经过时
无论如何,你可以用一行程序很好地解决这个问题。这里有几个脚本可以初始化你的数组
如果您已经有了一个四维数组,您可以像这样优雅地初始化它:
function createNDimensionalArray(dims) {
return dims.length === 1
? new Array(dims[0])
: Array.apply(null, Array(dims[0])).map(createNDimensionalArray.bind(null, dims.slice(1)));
}
var arr = createNDimensionalArray([2, 3, 4, 5]);
console.log(arr); // creates 4-dimensional array 2x3x4x5
arr.forEach(function(e) { e[0][0][0] = c })
或者,如果您更喜欢地图
:
arr.map(function(e) { e[0][0][0] = c })
这些都是假设您已经定义了c,这是您在代码示例(20)中定义的
不过,从现在开始,在stackoverflow上提问之前,请用谷歌搜索你的问题。你将收到一个已经被接受的答案:)不清楚您想要什么,但我认为四维数组是一组嵌套3深的数组,每个数组嵌套2深的数组,每个数组都有一个包含值的数组
在一维数组中,可以通过以下方式访问索引2处的值:
arr[2];
在二维数组中,可以通过以下方式访问(2,3)处的值:
依此类推,直到通过以下方法得到四维数组中(2,3,1,2)处的值:
arr[2][3][1][2]
如果这是数组中唯一的值,它看起来会是:
[,,[,,,[,[,,'value at 2312']]]];
[,[,[[,,'value at 1102']]],[,,,[,[,,'value at 2312']]]];
如果在(1,1,0,2)处也有一个值,则数组现在看起来像:
[,,[,,,[,[,,'value at 2312']]]];
[,[,[[,,'value at 1102']]],[,,,[,[,,'value at 2312']]]];
最后一个嵌套数组中只能有值,每个其他数组中索引处的值必须是另一个数组(对于较低维度),因此要在处插入值,例如(2,1,3,1)并将其赋值为6,您需要循环数组并检查每个索引。如果它还不是数组,请插入一个数组并继续,例如:
//在坐标处的数组中插入值
//坐标是以逗号分隔的坐标列表。
函数insertValue(数组、坐标、值){
var coords=coord.split(',');
var-arr=数组;
对于(var c,i=0,iLen=coords.length-1;i document.write('result:'+JSON.stringify(insertValue([],'1,2,1,3','at 1213'));
tnx,但这仅适用于第一维度,当我尝试这样做时:arr[0][I][0][0]=c;或arr[0][0][I]=c;这不可行,我不想为每个维度编写arr,这样如何?恐怕您必须为每个维度创建数组。“这不是工作”并不是一个充分的解释。您至少应该描述您期望结果的样子,最好使用多个.tnx,但这只是第一维度的工作,当我尝试这样做时:arr[0][I][0][0]=c;或arr[0][0][0][I]=c;这不起作用,我不想为每个维度编写arr,这个怎么样?除了你的示例不符合OP的要求。arr只包含一个成员,所以forEach只会循环该成员并设置一个值。OP似乎试图用值20填充5个成员。啊,对不起,我想我误解了这个问题。