使用javascript,如何向数组添加包含字段(字段名称和字段值对)的元素?
这样做的目的是使用ajax将每个元素作为一行插入到DB中
只是为了确保 - 在阵列准备好之后我应该能够以这种方式访问字段:
shopsArray[4].shopName
编辑: 它正在使用Pointy的答案,但我仍有问题:
shopsArray.push( { shopId: 1, shopAddress: $('#newAddress' + j).val() } );
第一个值插入正常,但第二个值有问题
如果我提醒$('#newAddress' + j).val()
,则会获得已插入网页字段中的正确值
但是,如果我提醒shopsArray[lastElementNumber].shopAddress
而不是undefined
。
你能看到这里有什么问题吗?
编辑2: 更详细的代码:
// save changes in main shop
shopsArray[0].shopName = $('#mainName').val();
shopsArray[0].shopAddress = $('#mainAddress').val();
// save secondary branches to array
for (var i=1; i<shopsArray.length; i++){
shopsArray[i].shopName = $('#secondaryName' + i).val();
shopsArray[i].shopAddress = $('#secondaryAddress' + i).val();
}
// save new branches to array
for (var j=1; j<=newshopsCounter; j++){
var bName = $('#newName' + j).val();
shopsArray.push({shopId: -1, userId: shopsArray[0].userId, shopName: bName, shopAddress: $('#newAddress' + j).val()});
alert(bName);
alert(shopArray[1].shopName);
alert(shopsArray[1].shopId);
}
第一个和第三个警报提供正确的值。第二个给出undefined
。
答案 0 :(得分:2)
你的意思是
shopsArray.push({ shopName: "Fred", value: "Ethel" });
编辑 - 现在我知道这是你想要做的事情,我会澄清。
JavaScript具有“对象文字”语法,允许将对象直接创建为值。语法涉及属性名称和值的列表,名称和值由冒号分隔,每对用逗号分隔。因此:
var anObject = { someProperty: "the value" };
创建一个具有一个属性的对象,并将其分配给变量“anObject”。这实际上与:
相同var temp = new Object();
temp["someProperty"] = "the value";
var anObject = temp;
对象文字中属性的“值”部分可以是任何表达式,但属性名称必须是字符串常量或标识符(在任何一种情况下,它都是处理,如同字符串常量)。因此,您可以使用属性创建一个对象,该属性的值来自调用某个函数:
var fancyObject = { "temperature": getTemperature() };
对象文字表达式是值,可以在任何可以使用表达式的地方使用,包括函数调用参数。因此,要将对象添加到数组,可以调用数组“.push()”函数并使用对象文字作为参数,如第一个示例所示:
shopsArray.push({ shopName: "Cheese Shoppe", shopPhone: "111 222 3232" });
您甚至可以在其他对象文字中包含对象文字,作为属性的值:
shopsArray.push({
shopName: "Cheese Shoppe",
shopAddress: {
street1: "207 High Street",
street2: "No. 5",
city: "Austin",
state: "TX"
}
});
答案 1 :(得分:0)
您只需在数组中创建一个哈希即可实现:
var shopsArray = [
{
shopName: 'value1'
}, {
shopName: 'value2'
}
];
如果您有现有数组,请使用push:
shopsArray.push({ shopName: 'value' });
答案 2 :(得分:-1)
你可以这样做:
var arr = new Array();
arr['field_name'] = 'field_value';
//to access it on ajax
for (var i in arr){
//field_name is in "i"
//field_value is in arr[i]
}