如何从两个变量创建一个{key:value}对象?

时间:2016-10-08 12:55:23

标签: javascript dictionary ecmascript-6

我想创建一个类型为{key:value}的对象,其中键名是可变的。必须将此类对象提供给chrome.storage.<storageType>.set(keys, function(){...})

关于SO的相关问题很多有工作答案,但我无法找到合适的问题解释。它归结为在JSON对象上设置属性。我做了这个测试:

var desiredKey = "123",
    desiredValue = "Value for key 123",
    foo;

// 1-The basic: Using a literal
console.log({ "123": desiredValue });

// 2-The problem occurs when the key name is not a literal
console.log({ desiredKey: desiredValue });

// 3-The solution is to assign a key explicitely
foo = {};
foo[desiredKey] = desiredValue;
console.log(foo);

结果:

Object { 123: "Value for key 123" }          <-- Literal
Object { desiredKey: "Value for key 123" }   <-- Variable (wrong)
Object { 123: "Value for key 123" }          <-- Assignment (ok)

问题:

  • 为什么方法2失败了?什么存储? desiredKey的参考/地址?
  • 方法3是最简单的吗?或者是否有一个指令解决方案?

1 个答案:

答案 0 :(得分:1)

方法4

Computed property

  

从ECMAScript 2015开始,对象初始化程序语法还支持计算属性名称。这允许您将表达式放在括号[]中,它将作为属性名称计算。这与property accessor语法的括号表示形式对称,您可能已经习惯使用它来读取和设置属性。

var desiredKey = "123",
    desiredValue = "Value for key 123",
    foo = { [desiredKey]: desiredValue };

console.log(foo);