【问题标题】:Creating json keys on the fly即时创建 json 键
【发布时间】:2012-06-14 23:50:14
【问题描述】:

我想创建一个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 不应该做的事情?

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

(请注意,这与 JSON 无关。您没有使用 JSON,您使用的是 object initializerJSON 是文本(不是代码)格式,它是 子集。)

在对象初始化器之外使用[] 表示法:

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

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

这将采用product[id] 的值(在运行时)并将其用作属性的键。如果您希望字面意思的键是product[123],而id123,您可以改用这个:

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

更一般的讨论:

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

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

【讨论】:

  • 我把这个问题解释为他确实想要一个名为product[123] 的属性,但这个问题根本不清楚......
  • @Matt:我明白你的解释,谢谢。我不会那样读的,但现在你已经指出了...... :-)
【解决方案2】:

试试

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

【讨论】:

    【解决方案3】:

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

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

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

    var product=[];
    product['123']='something';
    product[id]='another';
    

    【讨论】:

    • 这将创建一个对象 (post),其属性为 123 和属性 id (demo)。此外,他在属性名称中使用[] 并没有错。
    • 您的代码创建了一个属性名称为123id 的对象。它确实使用id 变量的值。
    • JavaScript 中的一切都是对象,而不是相反;并非所有对象都是数组。
    • 不使用id的值?那么对象的属性名是什么?
    • @Jerry:见jsfiddle.net/sH38n/1。这是id。如果对象文字中的键是保留字,或者包含 -+ 等运算符,则只需要引用它。
    猜你喜欢
    • 2013-08-17
    • 2011-09-12
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2011-10-23
    • 2011-01-12
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多