在对象内部创建一个空数组的JavaScript语法

3

我有一个像这样的对象:

var obj = {
    age:["23"],
    part:["0"],
    race:[],
    state:["AL"],
    gender:["1"],
    county:["9999"],
    consent:["9999"]
};

我将这个对象传递给php进行处理,但是race[]没有随其他内容一起传递到php。如何更改race使其被发送并具有值""

编辑:其中任何一个(年龄、部分、比赛等)都可能为空,因此我需要一种检查然后更改的方法。

我使用了这段代码循环遍历对象/数组:http://jsfiddle.net/jshado1/wLZMH/


3
你尝试过 obj.race = [""]; 吗? - Frédéric Hamidi
4
你是如何将其传递给PHP的?此外,为什么你所有的对象值都是长度为1的数组? - fluffy
@fluffy:通过jQuery AJAX。种族可以有多个值,例如race:["亚洲人","黑人","白人"] - Jakob Jingleheimer
2
jQuery参数序列化器(以及一般的浏览器)省略未填写的字段是正常的 - 您应该修复您的PHP脚本以预期此情况。 - Alnitak
@jacob 好的,他们可以有多个年龄和居住状态吗?(还有,“1”代表什么性别?) - fluffy
显示剩余2条评论
2个回答

2

Just do:

if(obj.race!==undefined && obj.race.length===0){
   obj.race = [""];
}

或者:

if(obj.race!==undefined && obj.race.length===0){
   obj.race.push("");
}

编辑:

对于所有元素

for(var key in obj){
 if(obj[key]!==undefined && obj[key].length===0){
     obj[key] = [""];
 }
}

谢谢!顺便说一下,我写的时候是 obj[key].length < 1,但它没起作用。 - Jakob Jingleheimer

1

我不确定你为什么要以那种方式标记它。如果你要将键值对传递给PHP,那么它应该如下所示:

var obj = {
    age: "23",
    part: "0",
    race: {
        "Value 1",
        "Value 2"
    },
    state: "AL",
    gender: "1",
    county: "9999",
    consent: "9999"
};

这样一来,每个值都会被传递到PHP(因为它是一个字符串,尽管为空)。


它们是数组,因为“race”可能有多个值。 - Jakob Jingleheimer
你最好传递一个对象而不是一个数组,就像上面修改的那样。 - Martin Bean
从功能上看,这个与我已有的数组有什么区别? - Jakob Jingleheimer
1
数组用于数字索引的数据,对象用于非数字键。此外,对象更具可扩展性。 - Martin Bean
啊,好的。那么在你的例子中,age:"23" 是什么意思?而 race: {"value 1","value 2"}(它们都是对象吗)? - Jakob Jingleheimer
1
“23”是一个字符串,因为它被引号包围(它可能应该是一个整数)。race的值是一个对象,因为它被大括号(“{”和“}”)包裹。 - Martin Bean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接