我需要定义一个哈希,用于使用jQuery发布一些ajax数据。 哈希看起来像:
var setname = 'set_1';
elements = { set_1: {'beer','water','wine'} };
我需要解决的挑战是'set-1'(数组元素的关键字)应该根据var setname
的值动态命名。
我当然希望避免使用eval()
..
在PHP中,它可以使用像这样的双美元符号来完成:$$setname
,但是在JavaScript中执行此操作的方法是什么?
答案 0 :(得分:30)
你可以做你想要的事情:
var setname = 'set_1', elements = {};
elements[setname] = ['beer','water','wine'];
alert(elements['set_1']); // beer,water,wine
在http://jsfiddle.net/x5KRD/处查看此操作。
可以使用点符号(obj.method()
或obj.property
)或括号表示法(obj['method']()
访问JS中的所有对象或obj['property']
)。使用括号表示法可以动态指定方法/属性/键名称。
例如,虽然笨拙,但window['alert']('hi')
相当于window.alert('hi')
。
请注意,无论如何,您的代码将不会按原样运行,因为您使用对象文字符号({'beer','water','wine'}
)来包含数组(它应该放在方括号['beer','water','wine']
中) 。对象文字需要有键值对。
答案 1 :(得分:6)
var setname = 'set_1',
elements = {};
elements[setname] = ['beer','water','wine'];
答案 2 :(得分:2)
你必须明白Javascript中确实没有“JSON符号”这样的东西 - 它是我们正在讨论的原生Javascript符号。 jQuery想要的是POST数据的Javascript值,不一定是Javascript对象常量。
因此,您的代码将准备您的POST数据,如下所示:
var elements = {};
elements[setName] = { /* something */ };
elements[somethingElse] = { /* something else */ };
等等。当您准备好进行POST时,您只需使用“元素”:
$.post(url, elements, function() { /* callback code */ });