如何将变量插入JavaScript对象中作为键?

时间:2011-04-12 20:08:05

标签: javascript dictionary

如何使用变量a的值作为查找属性的键?我希望能够说:b["whatever"]并且返回20:

var a = "whatever";
var b = {a : 20};     // Want this to assign b.whatever
alert(b["whatever"]); // so that this shows 20, not `undefined`

我在询问是否有可能在创建b期间让它包含"whatever":20而不是a:20,其中“what”本身就是变量。也许可以使用eval

7 个答案:

答案 0 :(得分:46)

var a = "whatever";
var b = {};
b[a] = 20;
alert(b["whatever"]); // shows 20

答案 1 :(得分:36)

这适用于Firefox 39和Chrome 44.不了解其他浏览器。它也不适用于nodejs v0.12.7。

var a = "whatever";
var b = { [a]: 20 };
console.log(b["whatever"]); // shows 20

即插入变量,将其括在括号中。

我不确定这是否是任何标准的一部分。最初,我在这里看到了这样的语法:作者定义的https://hacks.mozilla.org/2015/07/es6-in-depth-classes/

[functionThatReturnsPropertyName()] (args) { ... }

我也不确定你是否应该使用这种语法。它并不广为人知。您团队中的其他成员可能无法理解代码。

答案 2 :(得分:5)

var a = "whatever";
var b = {a : 20};
b[a] = 37;
alert(b["whatever"]); // 37

'a'是一个值为'a'的字符串。 a是一个值为'whatever'的变量。

答案 3 :(得分:5)

好问题。我有时间用下划线来解决这个问题,但答案不会更简单:

var a = "whatever";
var b = {a : 20};

var array = [a, b]
var answer = _.object([[array]])// {whatever: {a:20}}//NOTICE THE DOUBLE SET OF BRACKETS AROUND [[array]]

我希望这有帮助!

答案 4 :(得分:2)

试试这个:

var a = "whatever";
var c = "something";
var b = {whatever : 20, something: 37};
alert(b[a]); // Shows 20
alert(b[c]); // Shows 37

这是fiddle

或者,如果我从下面的评论中正确理解,请尝试:

var a = "whatever";
var b = {a : 20};
alert(b.a); // Shows 20

答案 5 :(得分:0)

要显示所有选项,我想提及CoffeeScript这样做的方法,即:

var a = "whatever";
var b = (
  obj = {},
  obj["" + a] = 20,
  obj
);

alert(b.whatever); // 20

虽然我更喜欢:

var a = "whatever";
var b = {};
b[a] = 20;

alert(b.whatever); // 20

答案 6 :(得分:-1)

如果是

怎么办?
var a = "whatever.other";
var b = {a:20};
expected output b["whatever"]["other"] should return 20