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)
不行,你得用第二种方法。
要了解其原因,请考虑以下代码:
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)