Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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中初始化4d数组?_Javascript_Arrays_Multidimensional Array_Initialization - Fatal编程技术网

如何在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;idocument.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个成员。啊,对不起,我想我误解了这个问题。