我正在尝试将多维数组初始化为函数的值。我试过了,但结果并不是我所期待的。
elemSize 是一个包含维度的数组, init 是每个元素的值。
function MakeArray(elemSize, init) {
var a = [];
for (var i = 0; i < elemSize.length; i++) {
var aj = [];
for (var j = 0; j < elemSize[i]; j++) {
aj[j] = init;
}
a[i] = aj;
}
return a;
}
这是结果
>>> var a = MakeArray([3,2], 5);
undefined
>>> a
[[5, 5, 5], [5, 5]]
但我会得到:
[[5 5] [5 5] [5 5]]
答案 0 :(得分:1)
你的逻辑有点不对劲。这是输出所需内容的代码(三个包含两个元素的数组):
function MakeArray(elemSize, init) {
var a = [];
for (var i = 0; i < elemSize[0]; i++) {
var aj = [];
for (var j = 0; j < elemSize[1]; j++) {
aj[j] = init;
}
a[i] = aj;
}
return a;
}
elemSize的第一个元素表示数组的数量,第二个元素表示每个数组的长度。
答案 1 :(得分:0)
不要遍历elemSize.length
和elemSize[i]
但elemSize[0]
和elemSize[1]
:
function MakeArray(elemSize, init) {
var a = [];
for (var i = 0; i < elemSize[0]; i++) {
var aj = [];
for (var j = 0; j < elemSize[1]; j++) {
aj[j] = init;
}
a[i] = aj;
}
return a;
}
如果你想要一个真正的多维数组,那么你必须创建一个递归函数,因为你的循环方法对此不起作用:
function MakeArray(elemSize,init){
if(elemSize.length === 0)
return init;
var result = [];
var otherSize = elemSize.slice(1);
var otherArray = MakeArray(otherSize,init);
for(var i = 0; i < elemSize[0]; ++i){
result.push(otherArray);
}
return result;
}
var myArray = MakeArray([5,5,5],2);
答案 2 :(得分:0)
您需要一个递归算法来创建具有任意维数的数组。
function MakeArray(sizes, init) {
var a = [];
if (sizes.length > 1) {
var b = sizes.slice(1);
for (var i = 0; i < sizes[0]; i++) {
a.push( MakeArray(b, init) );
}
} else {
for (var i = 0; i < sizes[0]; i++) {
a.push( init );
}
}
return a;
}