在javascript中创建多维数组,在自定义函数中出错

时间:2012-04-11 14:10:34

标签: javascript arrays

我试图在一个javascript语句中定义一个数组(包括其他数组作为值),我可以循环验证提交时的表单。

我写的(尝试)创建内联数组的函数如下:

function arr(){
    var inc;
    var tempa = new Array(Math.round(arguments.length/2));
    for(inc=0; inc<arguments.length; inc=inc+2) {
        tempa[arguments[inc]]=arguments[inc+1];
    }
    return tempa;
}

这里调用三次来分配一个数组:

window.validArr = arr(
    'f-county',arr('maxlen',10, 'minlen',1),
    'f-postcode',arr('maxlen',8, 'minlen',6)
);

但是在javascript调试器中,变量为空,arr()函数没有返回任何内容。有谁知道为什么我对这段代码应该做的期望不正确?

我已经研究了如何创建没有此函数的数组 ,但我很好奇为什么这段代码不起作用(我以为我更好地理解了javascript)比这个)。)

2 个答案:

答案 0 :(得分:2)

从代码的功能来看,你并没有真正制作数组。在JavaScript中,使数组特殊的是管理数字索引属性。否则它们只是对象,所以它们也可以有其他属性,但是如果你不使用数组作为数组,你也可以只使用对象:

function arr(){
    var inc;
    var tempa = {};
    for(inc=0; inc<arguments.length; inc=inc+2) {
        tempa[arguments[inc]]=arguments[inc+1];
    }
    return tempa;
}

你从调试器中看到的是它试图向你显示你的数组的结果,因为应该显示一个真实的数组:即它的数字索引属性。如果按原样调用“arr()”函数然后查看(从您的示例中)结果的“f-county”属性,您将在那里看到一些内容。

此外,如果您发现自己想要一个真正的数组,那么将它们初始化为特定大小绝对没有意义。只需使用[]创建一个新数组:

    var tempa = [];

答案 1 :(得分:1)

您的代码有效。只需检查您的变量,您将看到该数组上有自定义键。如果没有展开,你的调试器会以简短的语法显示(数字)固定值 - 对你来说没有。

但是,您可能需要了解数组和对象之间的区别。对象只是键值对(你可以称之为“地图”)及其原型。 Array是一种特殊类型的对象。它具有特殊的原型方法,length功能和不同的方法:存储索引值对(即使索引仍然是键)。所以,you shouldn't use an Array as an associative array

因此,它们的字面语法不同:

var array = ["indexed with key 0", "indexed with key 1", ...];
var object = {"custom":"keyed as 'custom'", "another":"string", ...};
// but you still can add keys to array objects:
array.custom = "keyed as 'custom'";