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

Posted

技术标签:

【中文标题】在Javascript中使用枚举的值作为另一个枚举中的键【英文标题】:Using value of enum as key in another enum in 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";

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

【问题讨论】:

您要动态执行此操作吗? 【参考方案1】:

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

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

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

【讨论】:

是的!这称为计算属性名称:developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 这应该是公认的答案,正是我想要的!【参考方案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' 

【讨论】:

以上是关于在Javascript中使用枚举的值作为另一个枚举中的键的主要内容,如果未能解决你的问题,请参考以下文章

使用 RxJava 生成一个映射,其中键是 Kotlin 枚举的值,映射的值来自另一个 RxJava 流

可以创建枚举作为另一个枚举的一部分吗?

C语言中的枚举类型

javascript Javascript Object.assign Alternative。 mergeObject()方法用于从一个或多个复制所有可枚举的自有属性的值

从资源中设置 xml 中枚举的值

Typescript 枚举作为参数类型允许无效值