如何在散列中将变量值指定为变量名?

时间:2010-11-16 21:24:15

标签: javascript variables

我需要定义一个哈希,用于使用jQuery发布一些ajax数据。 哈希看起来像:

var setname = 'set_1';
elements = { set_1: {'beer','water','wine'} };

我需要解决的挑战是'set-1'(数组元素的关键字)应该根据var setname的值动态命名。

我当然希望避免使用eval() .. 在PHP中,它可以使用像这样的双美元符号来完成:$$setname,但是在JavaScript中执行此操作的方法是什么?

3 个答案:

答案 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 */ });