这可能以前被问过,但我找不到任何线程。
我有一个带有常量的对象,我想将其用作对象列表中的键:
//CONSTANTS.Foo === 1
//CONSTANTS.Bar === 2
var list = [{ CONSTANTS.Foo: 'foo' }, { CONSTANTS.Bar: 'bar' }];
这显然是一个无效的语法。我应该如何解决这个问题?我正在考虑 Array.map(),但我想要您的意见。
这可能以前被问过,但我找不到任何线程。
我有一个带有常量的对象,我想将其用作对象列表中的键:
//CONSTANTS.Foo === 1
//CONSTANTS.Bar === 2
var list = [{ CONSTANTS.Foo: 'foo' }, { CONSTANTS.Bar: 'bar' }];
这显然是一个无效的语法。我应该如何解决这个问题?我正在考虑 Array.map(),但我想要您的意见。
您不能拥有带有动态键的对象文字,您需要在对象初始化后添加属性:
var o, list = [];
o = {}; o[CONSTANTS.Foo] = 'foo'; list.push(o);
o = {}; o[CONSTANTS.Bar] = 'bar'; list.push(o);
当然,如果你在常量和值之间有某种已知的关系,你可以自动化这个构造或者让它更干。
你也可以这样做:
var list = [{ Foo: 'foo' }, { Bar: 'bar' }].map(function(o){
for (var k in o) {
o[Constants[k]]=o[k];
delete o[k];
}
return o;
});
首先创建一个构造函数:
function Obj(propertyName, value) {
this[propertyName] = value;
}
然后你可以这样做:
var list = [new Obj(CONSTANTS.Foo, 'foo'), new Obj(CONSTANTS.Bar, 'bar')]