使用枚举值作为Javascript中另一个枚举的键

Aay*_*mar 4 javascript enums hashmap map

我有一个枚举:

var a = {X: 0, Y: 1};
Run Code Online (Sandbox Code Playgroud)

并且,我想从第一个的值创建另一个枚举.像这样的东西:

var b = {a.X: "foo", a.Y: "bar"};
Run Code Online (Sandbox Code Playgroud)

这样做给了我一个 SyntaxError: Unexpected token .

有没有办法在javascript中使用一个枚举的值作为另一个的关键?

仅供参考:我知道我可以做这样的事情来实现我想要的

var b = {};
b[a.X] = "foo";
b[a.Y] = "bar";
Run Code Online (Sandbox Code Playgroud)

但是,从可读性的角度来看,我更希望是否有某种方式可以用以前的方式来做.

T M*_*ell 21

我只是在寻找其他东西时遇到了这个......

您现在可以使用ES6语法执行此操作

var b = {
    [a.X]: "foo", 
    [a.Y]: "bar"
};
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,正是我正在寻找的! (2认同)

Dan*_*Tao 4

不行,你得用第二种方法。

要了解其原因,请考虑以下代码:

var foo = 'bar';

var object = {
  foo: 'baz'
};
Run Code Online (Sandbox Code Playgroud)

在对象字面量中,foo值存储在变量 foo中还是字符串 "foo"中?

根据语言规则,是后者。因此对象表达式的键本身不能是复杂的表达式。

就可读性而言,最接近的可能是按照以下方式编写助手:

function mapKeys(object, keyMapping) {
  var mapped = {};
  for (var key in keyMapping) {
    mapped[object[key]] = keyMapping[key];
  }
  return mapped;
}

var a = { X: 0, Y: 1 };

var b = mapKeys(a, {
  X: 'foo',
  Y: 'bar'
});
// => { 0: 'foo', 1: 'bar' }
Run Code Online (Sandbox Code Playgroud)