//修复了拼写错误[]应该是[[]] //抱歉//但我仍然困惑。//我想用正确的维数而不是正确的元素数来初始化一个空数组。
我得到了以下行为。
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<y;x++)
{ sdata[x] = []; }
sdata[c][d][e] = 4; // and so forth我必须事先知道y,幸运的是我知道。
发布于 2015-12-19 07:51:46
,这意味着我不能只创建一个空数组并给它赋值。我必须计算它有多少行,然后初始化一个这么长的空数组,然后给它的元素赋值。这是特别愚蠢的,因为我不知道我将获得的数据长度。
是的,这很愚蠢。这是愚蠢的,因为计算机是愚蠢的。处理好它。当然,在你之前,很多人已经解决了这个问题。
解决这个问题的一种方法是强制用户给你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;如果你对这个“写得太多”的把戏感兴趣。
发布于 2015-12-19 07:58:28
您的声明:
var sdata = [];
sdata[0][0] = 4;
sdata[0][1] = 5;如果失败,并使用node (node.js)运行此命令,它会这样做:
$ node
> var sdata = [];
undefined
> sdata[0][0] = 4;
TypeError: Cannot set property '0' of undefined
at repl:1:13
at REPLServer.defaultEval (repl.js:133:27)
at bound (domain.js:254:14)
at REPLServer.runBound [as eval] (domain.js:267:12)
at REPLServer.<anonymous> (repl.js:280:12)
at REPLServer.emit (events.js:107:17)
at REPLServer.Interface._onLine (readline.js:206:10)
at REPLServer.Interface._line (readline.js:535:8)
at REPLServer.Interface._ttyWrite (readline.js:812:14)
at ReadStream.onkeypress (readline.js:108:10)原因是sdata[0]返回undefined
> sdata[0]
undefined现在如何将项目添加到undefined (可以用null指针“比较”)。您至少需要一个要向其中添加项的对象。
你可以简单地通过生成一些保护模式来解决这个问题:
function add_data (sdata,i,j,x) {
var obj = sdata[i];
if(obj === undefined) {
obj = [];
sdata[i] = obj;
}
obj[j] = x;
}然后,您可以使用以下命令调用它:
var sdata = [];
add_data(sdata,0,0,4);
add_data(sdata,0,1,5);
add_data(sdata,1,0,5);并将导致:
> sdata
[ [ 4, 5 ], [ 5 ] ]发布于 2015-12-19 08:05:00
多维数组并不真正存在...尝试此解决方案:
if ( sdata[ x ] === undefined) sdata[ x ] = [];
sdata[ x ] [ y ] = yourValue;https://stackoverflow.com/questions/34365631
复制相似问题