我可以使用一些指导来在javascript中指定动态多维数组。据我所知,javascript本身并不是定义多个dim数组,而是一个数组的数组,即
var items = [[1,2],[3,4],[5,6]];
或
var array = [[,],[,]]
或
var a = [[1,2],[3,4]]
我的问题是我不知道实际的尺寸,只是定义数组,如上面的第二个例子,仍然不允许数组超出两个记录集。我认为有一个类似于VB的REDIM stmt但是找不到任何东西。
我的另一个问题是,当我指定数组的第二个维度时,如下例所示,数组在for块之外变得无法访问。
var Exforsys=new Array(4)
for (i=0; i <4; i++) {
Exforsys[i]=new Array(4)
}
我正在尝试从我的特定数组中检索数据......
function newTest() {
var myArray = [[],[]];
// myArray[] = new Array(14);
var recCount = coordsAry.length / 15;
var n =0;
var i = 0;
var s = 0;
for (i = 0; i < recCount; i++) {
for (s = 0; s < 15; s++) {
// myArray[i] = new Array(14);
myArray[i][s] = coordsAry[n];
n++;
// alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));
}
// var u = 4;
s = 0;
alert(myArray[0][3]);
alert(myArray[0][4]);
alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));
}
coordsAry有105条记录并且是平的,{“12”,“Frank”,“564”,...等等,这已被证实。填充第二条记录后,我收到此错误....
Error: Unable to set value of the property '0': object is null or undefined.
显然,我的javascript技能至少可以说有点粗糙。任何示例代码都将非常感激。
谢谢,
答案 0 :(得分:16)
您不要将数组调暗到实际大小,
你可以在任何索引上设置一个你想要的变量
如果你想要两个Dimensions,你可以定义一个数组
var arr = []
将元素设置为另一个数组
arr[0] = []
并在“第二维”
中的元素中放置一个值 arr[0][10] = 10
您只有“第一维”中的元素才是数组
你也可以做一些事情,比如将数组放入数组
像
var arr = []
var arr1 = [1,2,3]
arr[0] = arr1
console.log(arr[0][2]) //3
如果你有一个数组并且想要在内部数组中推送元素,那么只需检查元素是否已定义,如
var arr = []
for ( var i = 0; i < 5 ; i++) {
if(!arr[i])
arr[i] = []
for ( var j = 0; j < 3 ; j++)
arr[i][j] = i + " - " + j // Or like this,
//arr[i].push(i + " " + j) //
}
console.log( arr[2][3]) // 2 - 3
function newTest() {
var myArray = [[],[]];
// myArray[] = new Array(14);
var recCount = 15
var n =0;
var i = 0;
var s = 0;
for (i = 0; i < recCount; i++) {
if(!myArray[i])
myArray[i] = []
for (s = 0; s < 15; s++) {
console.log(i)
// myArray[i] = new Array(14);
myArray[i][s] = s;
n++;
// alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));
}
// var u = 4;
s = 0;
alert(myArray[0][3]);
alert(myArray[0][4]);
alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));
}
}
newTest()
这对我有用
答案 1 :(得分:3)
所有数组在javascript中都是动态的。你可以做像
这样的事情var list = [];
list[15] = 15;
它只是将数组扩展为长度为16,前15个索引的值未定义(~null)。因此,您的3个多维数组示例应该都可以工作。
编辑:刚看到你已经包含了你的代码。您没有初始化第一个维度的数组。你的循环应该是
for (i = 0; i < recCount; i++) {
//If the outer array does not have an inner array at this position already, create one
if (!myArray[i])
myArray[i] = []; //!!!
for (s = 0; s < 15; s++) {
// myArray[i] = new Array(14);
myArray[i][s] = coordsAry[n]; //myArray[i] returned null/undefined, when i got bigger then the declared array.
n++;
// alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));
}
// var u = 4;
s = 0;
alert(myArray[0][3]);
alert(myArray[0][4]);
alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));
}
答案 2 :(得分:0)
要向数组添加元素,可以使用push(val)(添加数组的背面)或unshift(val)添加到数组的前面。所以:
var Exforsys=[];
for (i=0; i <4; i++) {
Exforsys.push([]);
}
答案 3 :(得分:0)
最近,我一直在使用这种语法来创建固定行和列的二维数组。
创建二维数组:
new Array(rows).fill(0).map(_ => new Array(cols))
创建二维数组并填充默认值:
new Array(rows).fill(0).map(_ => new Array(cols).fill(0))
详情:
rows
使用给定的 new Array(rows)
创建一维数组。.fill(0)
填充此数组的值。这一步是必需的,因为 JavaScript 数组的 map 方法不会迭代空值。.map(_ => new Array(cols))
使其成为二维数组。