//修正了一个拼写错误[]应该是[[]] //抱歉//但我仍然难倒 //我想用正确数量的维度初始化一个空数组,而不是正确的元素数.
我有以下行为.
var sdata = [[]]; sdata[0][0] = 4; sdata[0][1] = 5;
有用.
但
var sdata = [[]]; sdata[0][0] = 4; sdata[0][1] = 5; sdata[1][0] = 6;
不起作用,意味着第三个要素.
然而
var sdata = [[]]; sdata[0] = []; sdata[1] = []; sdata[0][0] = 4; sdata[0][1] = 5; sdata[1][0] = 6;
也有效.
这意味着我不能只创建一个空数组并给它赋值.我必须计算它将有多少行,然后初始化一个长度很长的空数组,然后给它的元素赋值.这是特别愚蠢的,因为我不知道我将获得的数据长度.
当我说它不起作用时,它意味着console.log打印vs不打印.
更新:是的,这是愚蠢的.但是有一条银线 - 你只需要在第一级进行初始化.当你给它们一个值时,下面的级别会自动初始化.
所以基本上,以下将有效
var sdata = [[]]; sdata[0][0]= 4; // first element initialization is not a problem sdata[0][1]= 4; // still falls under first
但跟随不会
var sdata = [[]]; sdata[0][0]= 4; sdata[0][1]= 4; sdata[1][0]= 4; // no it wont, anything after first parent element requires explicit initialization
以下是
var sdata = [[]]; sdata[0]=[] sdata[1]=[] // explicit initialization sdata[0][0]= 4; sdata[0][1]= 4; sdata[1][0]= 4; // now it will
但是以下也会奏效
var sdata = [[]]; sdata[0]=[] sdata[1]=[] sdata[0][0]= 4; sdata[0][1]= 4; sdata[1][0]= 4; // expected to work and will sdata[1][1]= 4; // expected to work and will sdata[1][0][0]=5; // expected to work since its first element and will sdata[1][1][1]=5; // expected not to work since its the second element , but it will work, since parent is initialized
底线 - 只需要第一级初始化,低于此水平不是问题.
所以现在我基本上在做
for (x=0;x我必须事先知道,我很幸运.
1> CR Drost..:这意味着我不能只创建一个空数组并给它赋值.我必须计算它将有多少行,然后初始化一个长度很长的空数组,然后给它的元素赋值.这是特别愚蠢的,因为我不知道我将获得的数据长度.
是的,这很愚蠢.这是愚蠢的,因为计算机是愚蠢的.处理它.当然,很多人在你面前解决了这个问题.
解决它的一种方法是强制用户给你JSON.这真的很容易.而不是试图写
var sdata = [[]]; sdata[0][0] = 4; sdata[0][1] = 5; sdata[1][0] = 6;
你可以粘贴他们给你的东西:
var sdata = [[4,5],[6]];
这非常简单,如果出现问题,您可以责怪用户.
您可以做的另一件事是查找哪种数据边界表示新行.例如,在解析CSV时,您会查找换行符并递增行索引,然后将新数组附加到输出文本上.
最后,如果你坚持写出来,只需修改原始数组即可!您可以轻松编写以下内容:
var sdata = []; sdata[0] = []; sdata[0][0] = 4; sdata[0][1] = 5; sdata[1] = []; sdata[1][0] = 6;
如果你进入这整个"写得太多"的话.