7

我想创建一个json对象作为 post 数组发送,但我需要动态创建密钥

var id = $('#myInput').val();

var post = {
    'product[123]': 'myValue',     // this works fine - but isn't dynamic
    'product['+id+']': 'myValue'   // this does not work
}

将其作为字符串发送可以正常工作,但是当我想让它更具动态性时会遇到问题。我在这里错过了一些非常简单的东西,还是我试图做一些Javascript不应该做的事情?

4

3 回答 3

18

(请注意,这与 JSON 无关。您没有使用 JSON,您使用的是对象初始化器。JSON一种文本(不是代码)格式,它是JavaScript 的对象初始化器语法的子集。)

在对象初始化器之外执行它,使用[]符号:

var id = $('#myInput').val();

var post = {};
post[product[id]] = 'myValue';

这将取值(在运行时)product[id]并将其用作属性的键。如果您希望键字面上product[123]when idis 123,则可以改用它:

post['product[' + id + ']'] = 'myValue';

更一般的讨论:

var a = "foo";
var obj = {};
obj[a] = "bar";
console.log(obj.foo); // "bar"

JavaScript 允许您以两种方式指定属性键:使用点分表示法和文字 ( obj.foo),或使用方括号表示法和字符串 ( obj["foo"])。在后一种情况下,字符串不必是字符串文字,它可以是任何表达式的结果。

于 2012-06-14T15:43:43.417 回答
0

尝试

post['product[' + id + ']'] = 'myValue';
于 2012-06-14T15:43:36.800 回答
0

为什么在对象的 id 中使用 '[ ]'?避免这样做。
在您的示例中,您可以通过以下代码执行此操作:

var id = $('#myInput').val();
var post = {
    '123': 'myValue',    
    id: 'myValue' 
}

或者,如果你真的想使用一个数组(实际上,JavaScript 中的所有对象都是数组)。你可以这样写:

var product=[];
product['123']='something';
product[id]='another';
于 2012-06-14T15:50:14.270 回答