简体   繁体   English

如何在散列中将变量值分配为变量名?

[英]how to assign variable value as variable name in a hash?

I need to define a hash for posting some ajax data using jQuery.我需要定义一个散列来使用 jQuery 发布一些 ajax 数据。 The hash will look something like:哈希将类似于:

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

The challenge I need to solve is 'set-1' (the key of Array elements) should be dynamically named based on the value of var setname .我需要解决的挑战是 'set-1'(数组元素的键)应该根据var setname的值动态命名。

I want to avoid using eval() of course.. in PHP it can be done using the double dollar sign like this: $$setname , but what's the way to do this in JavaScript?我当然想避免使用eval() .. 在 PHP 中它可以使用这样的双美元符号来完成: $$setname ,但是在 JavaScript 中这样做的方法是什么?

You can do what you'd like to like so: 你可以做你想要的事情:

var setname = 'set_1', elements = {};
elements[setname] = ['beer','water','wine'];
alert(elements['set_1']); // beer,water,wine

See this in action at http://jsfiddle.net/x5KRD/ . 请参阅http://jsfiddle.net/x5KRD/上的此操作。

All objects in JS can be accessed using dot notation ( obj.method() or obj.property ), or bracket notation ( obj['method']() or obj['property'] ). 可以使用点表示法obj.method()obj.property )或括号表示法obj['method']()obj['property'] )访问JS中的所有对象。 Using bracket notation lets you dynamically specify method/property/key names. 使用括号表示法可以动态指定方法/属性/键名称。

For example, while clumsy, window['alert']('hi') is equivalent to window.alert('hi') . 例如,虽然笨拙,但是window['alert']('hi')等同于window.alert('hi')

Note that your code won't work as-is, anyways, because you're using object literal notation ( {'beer','water','wine'} ) to contain an array (it should be in square brackets ['beer','water','wine'] instead). 请注意,无论如何,您的代码将无法正常工作,因为您使用对象文字符号( {'beer','water','wine'} )来包含数组(它应该放在方括号中['beer','water','wine']代替)。 Object literals need to have key-value pairs. 对象文字需要具有键值对。

var setname = 'set_1', 
    elements = {};

elements[setname] = ['beer','water','wine'];

You have to understand that there's really no such thing as "JSON notation" in Javascript - it's native Javascript notation that we're talking about. 你必须明白Javascript中确实没有“JSON符号”这样的东西 - 它是我们正在讨论的原生Javascript符号。 What jQuery wants is a Javascript value for the POST data, not necessarily a Javascript object constant. jQuery想要的是POST数据的Javascript值,不一定是Javascript对象常量。

Thus, your code will prepare your POST data like this: 因此,您的代码将准备您的POST数据,如下所示:

var elements = {};
elements[setName] = { /* something */ };
elements[somethingElse] = { /* something else */ };

and so on. 等等。 When you're ready to do the POST, you'd just use "elements": 当您准备好进行POST时,您只需使用“元素”:

$.post(url, elements, function() { /* callback code */ });

Directly use the identifier in square brackets :直接使用方括号中的标识符

const setname = 'set_1';
const elements = { [setname]: ['beer','water','wine'] }

Please bear in mind the usage of square brackets for lists请记住列表中方括号的使用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM