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

Creating multi-dimensional arrays in javascript, error in custom function

本文关键字:自定义函数 数组 出错 javascript 创建      更新时间:2023-09-26

我试图在单个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)。

从你的代码所做的,你并没有真正制作数组。 在 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 = [];

你的代码有效。只需检查您的变量,您就会看到数组上有自定义键。如果未展开,调试器将以简短语法仅显示(数字)独立值 - 没有适合您。

但是,您可能需要了解数组和对象之间的区别。对象只是键值对(你可以称之为"映射")及其原型。数组是一种特殊类型的对象。它具有特殊的原型方法,length功能和不同的方法:存储索引值对(即使索引仍然是键)。因此,不应将数组用作关联数组。

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

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'";