【问题标题】:How to use a variable value for the key of another object?如何将变量值用于另一个对象的键?
【发布时间】:2010-02-08 20:11:54
【问题描述】:

我有类似的东西:

var myMenu= [
  {
    'My English Title':function(menuItem,menu) 
                       { ... }
  }];

现在,我想用另一个 JSON 结构值 LOC.MENU_TITLE 替换“我的英文标题”。

我试过了:

var myMenu= [
  {
    LOC.MENU_TITLE:function(menuItem,menu) 
                       { ... }
  }];

但它不起作用。谁能告诉我如何在 JSON 变量中获取 JSON 值?

编辑: 这是使用Context Menu of Jquery,但我遇到了以下所有解决方案的问题,是时候为分隔符传递字符串了。它不显示分隔符,因为它将字符串传递给对象而不仅仅是字符串。

例子:

var menu1 = [
  {'Option 1':function(menuItem,menu) { alert("You clicked Option 1!"); } },
  $.contextMenu.separator,
  {'Option 2':function(menuItem,menu) { alert("You clicked Option 2!"); } }
];

【问题讨论】:

  • 这不是 JSON,它只是一个 JavaScript 对象。
  • JSON = JavaScript Object Notation ...我想我们说的是同一种语言:P
  • JSON 是 JavaScript 对象的序列化形式,因此语法要求略有不同。 JSON 始终表示为字符串,而不是真实对象。它被解析成真实的对象,或者被序列化成一个字符串。
  • 我认为混淆是因为数组和对象字面量表示法(实际上)等同于 JSON。
  • 需要注意的是,函数在 JSON 对象中没有任何意义,因为它是一种交换格式。你不能序列化一个 JS 函数,并且说 PHP 或 Java 是有意义的。

标签: javascript json


【解决方案1】:
var tempElement = {};
tempElement[ LOC.MENU_TITLE ] = function(menuItem, menu) {};

myMenu = [ tempElement ];

解决您的编辑问题。试试下面的

var myMenu = [ {}, $.contextMenu.separator, {} ];

myMenu[0][ LOC.MENU_TITLE ]  = function(menuItem, menu) {};
myMenu[2][ LOC.MENU_TITLE2 ] = function(menuItem, menu) {};

【讨论】:

    【解决方案2】:

    JavaScript object literals 期望键是 IdentifierString 文字或 Number 文字,解决方法可以是使用括号表示法逐步构建您的对象:

    var myMenu= [{}];
    myMenu[0][LOC.MENU_TITLE] = function(menuItem,menu){ /*...*/ };
    

    请注意,以上不是 JSON。

    JSON 是一种与语言无关的数据交换格式,它的语法与 JavaScript 对象文字不同,基本上只允许字符串键,值必须是对象、数组、数字、字符串或文字名称:false , nulltrue.

    【讨论】:

    • 为什么对象在数组中? var myMenu = {}; myMenu[LOC.MENU_TITLE] 不也可以吗?
    • 结构来自jQuery ContextMenu插件
    • 这不起作用,但贾斯汀约翰逊解决方案有效。试图理解为什么......
    猜你喜欢
    • 1970-01-01
    • 2022-12-10
    • 2022-12-03
    • 1970-01-01
    • 2020-01-03
    • 2015-03-19
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多