我想创建一个json
对象作为帖子数组发送,但我需要动态创建密钥
var id = $('#myInput').val();
var post = {
'product[123]': 'myValue', // this works fine - but isn't dynamic
'product['+id+']': 'myValue' // this does not work
}
以字符串形式发送它可以正常工作,但是当我想让它更具动态性时,我会遇到问题。我在这里遗漏了一些非常简单的东西,还是我想做一些Javascript不应该做的事情?
答案 0 :(得分:17)
(请注意,这与JSON无关。您没有在那里使用JSON,而是使用object initializer。JSON是一种文本(非代码)格式,这是JavaScript的对象初始化程序语法的子集。)
使用[]
表示法在对象初始值设定项之外执行:
var id = $('#myInput').val();
var post = {};
post[product[id]] = 'myValue';
这将获取product[id]
的值(在运行时)并将其用作属性的键。如果您希望product[123]
为id
时字面的密钥为123
,则您可以使用此代码:
post['product[' + id + ']'] = 'myValue';
更通用的讨论:
var a = "foo";
var obj = {};
obj[a] = "bar";
console.log(obj.foo); // "bar"
JavaScript允许您以两种方式指定属性键:使用点分表示法和文字(obj.foo
),或使用括号表示法和字符串(obj["foo"]
)。在后一种情况下,字符串不必是字符串文字,它可以是任何表达式的结果。
答案 1 :(得分:0)
尝试
post['product[' + id + ']'] = 'myValue';
答案 2 :(得分:0)
为什么在对象的id中使用'[]'?避免这样做。
在您的示例中,您可以通过以下代码执行此操作:
var id = $('#myInput').val();
var post = {
'123': 'myValue',
id: 'myValue'
}
或者,如果你真的想要使用arrry(实际上,所有对象都是JavaScript中的数组)。
你可以这样写:
var product=[];
product['123']='something';
product[id]='another';