在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 流
javascript Javascript Object.assign Alternative。 mergeObject()方法用于从一个或多个复制所有可枚举的自有属性的值