简体   繁体   English

Javascript可以动态创建多维数组吗

[英]Can Javascript create a multi-dimensional array on the fly

I am iterating over a JSON array (rec'd from a webworker AJAX call) 我正在遍历JSON数组(摘自Webworker AJAX调用)

var dataReceived = JSON.parse(xhr.responseText);//JSON verified as ok
                                               //dataReceived.length verified 
    var dataProcessed = []; 
   for (var i = 0; i < dataReceived.length; i++) {
    for ( var h = 0; h < dataReceived[i].length; h++) {
                dataProcessed[i][h][0]=((dataReceived[i][h][0])*30)-30;
                dataProcessed[i][h][1]=((dataReceived[i][h][1])*30)-30;
        }
    }
    postMessage(dataProcessed);

But i get the error 但是我得到了错误

dataProcessed[i] is undefined dataProcessed [i]未定义

Does Javascript not create multidimensional arrays on the fly? Javascript是否不会即时创建多维数组?

Does Javascript not create multidimensional arrays on the fly? Javascript是否不会即时创建多维数组?

No, you have to create it: 不,您必须创建它:

for (var i = 0; i < dataReceived.length; i++) {
    dataProcessed[i] = [];        // <============= Here
    for ( var h = 0; h < dataReceived[i].length; h++) {
        dataProcessed[i][h] = []; // <============= And here

Side note: You can make that more efficient by factoring out your repeated lookups; 注意:您可以通过排除重复查找来提高效率。 also, you can create and initialize the innermost array simultaneously: 同样,您可以同时创建和初始化最里面的数组:

var dataReceived = JSON.parse(xhr.responseText);
var dataProcessed = []; 
var recEntry, procEntry;
for (var i = 0; i < dataReceived.length; i++) {
    procEntry = dataProcessed[i] = [];
    recEntry = dataReceived[i];
    for ( var h = 0; h < recEntry.length; h++) {
        procEntry[h] = [
            ((recEntry[h][0])*30)-30,
            ((recEntry[h][1])*30)-30
        ];
    }
}
postMessage(dataProcessed);

No, javascript does not create multidimensional arrays on the fly. 不,JavaScript不会即时创建多维数组。 You will have to look for the edge case .eg first iteration of the loop, and then create an empty array. 您将不得不寻找边缘情况,例如循环的第一次迭代,然后创建一个空数组。

Or you can also initialize the array using || 或者,您也可以使用||初始化数组。 operator 算子

for (var i = 0; i < dataReceived.length; i++) {

dataProcessed[i] = []; // array

for ( var h = 0; h < dataReceived[i].length; h++) {
            dataProcessed[i][h] = []; // array
            dataProcessed[i][h][0]=((dataReceived[i][h][0])*30)-30;
            dataProcessed[i][h][1]=((dataReceived[i][h][1])*30)-30;
    }
}
postMessage(dataProcessed);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM