对象键中的点

时间:2013-11-07 09:21:46

标签: javascript

之前可能已经提出这个问题,但我找不到任何主题。

我有一个带有常量的对象,我想用它作为对象列表中的键:

//CONSTANTS.Foo === 1
//CONSTANTS.Bar === 2
var list = [{ CONSTANTS.Foo: 'foo' }, { CONSTANTS.Bar: 'bar' }];

这显然是无效的语法。我该怎么解决这个问题?我正在考虑Array.map(),但我想要你的意见。

http://jsfiddle.net/wKYe6/

2 个答案:

答案 0 :(得分:5)

您不能拥有带动态键的对象文字,您需要在对象初始化后添加属性:

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;
});

答案 1 :(得分:0)

首先创建一个构造函数:

function Obj(propertyName, value) {
    this[propertyName] = value;
}

然后你可以这样做:

var list = [new Obj(CONSTANTS.Foo, 'foo'), new Obj(CONSTANTS.Bar, 'bar')]

您的jsfiddle updated