[英]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.