在javascript中创建多维数组,自定义函数中出错
Creating multi-dimensional arrays in javascript, error in custom function
我试图在单个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'";
相关文章:
- javascript函数外未定义的数组
- JavaScript 自包含函数数组访问自我索引
- 如何在 Javascript 中制作自定义对象数组
- Google 表格自定义函数的多个数组输入,可将一个数组除以另一个数组
- 在javascript中创建多维数组,自定义函数中出错
- Javascript函数返回未定义的数组
- 生成自定义JSON数组
- 在JavaScript中连接自定义对象数组的字符串
- 使用自定义函数从字典中创建列表/数组
- JavaScript自定义数据数组到JSON
- 如何使用jQuery继续通过一组动画自定义函数完成后
- 在JQgrid的summaryType中编写一个自定义函数,用于组值的减法
- JavaScript中的自定义类数组getter
- MongoDB模式的自定义对象数组
- 从多个数组构建自定义JSON数组
- IE js通过自定义函数排序数组不起作用
- jquery.获得没有重复的自定义属性数组
- 如何改进我的自定义JavaScript数组反向函数
- 自定义对象数组的排序顺序
- 当数组很大时,如何定义函数数组