【问题标题】:Using value of enum as key in another enum in Javascript在Javascript中使用枚举的值作为另一个枚举中的键
【发布时间】:2014-02-16 06:59:00
【问题描述】:

我有一个枚举:

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

而且,我想根据第一个枚举的值创建另一个枚举。像这样的:

var b = {a.X: "foo", a.Y: "bar"};

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

有没有一种方法可以在 javascript 中使用一个枚举的值作为另一个枚举的键?

仅供参考:我意识到我可以做这样的事情来实现我想要的

var b = {};
b[a.X] = "foo";
b[a.Y] = "bar";

但是,从可读性的角度来看,我更喜欢前一种方式。

【问题讨论】:

  • 您要动态执行此操作吗?

标签: javascript map enums hashmap


【解决方案1】:

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

您现在可以使用 ES6 语法来做到这一点

var b = {
    [a.X]: "foo", 
    [a.Y]: "bar"
};

【讨论】:

【解决方案2】:

不,你必须用第二种方法。

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

var foo = 'bar';

var object = {
  foo: 'baz'
};

在对象字面量中,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' }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多