JavaScript将匿名对象键设置为变量名

JavaScript将匿名对象键设置为变量名,javascript,Javascript,但是,这将生成一个键为“key”的对象!如何使用变量key的值创建一个新对象?我想您的意思是: var curr = data[i], newArray = [], key = curr.Frequency.Type, obj = {key: []}; newArray.push(obj); 您可以这样做: var type = "some type"; var obj = {}; // can't do it one line

但是,这将生成一个键为“key”的对象!如何使用变量
key
的值创建一个新对象?

我想您的意思是:

    var curr = data[i],
        newArray = [],
        key = curr.Frequency.Type,
        obj = {key: []};
    newArray.push(obj);
您可以这样做:

var type = "some type";
var obj = {}; // can't do it one line
obj[type] = [];
console.log(obj); // { "some type": [] }
在对象文本本身的JavaScript中没有办法做到这一点;语法并没有提供这种功能

编辑-在编写此答案时,上述情况属实,但ES2015在对象初始值设定项中提供了动态键:

var curr = data[i],
    newArray = [],
    key = curr.Frequency.Type,
    obj = {};

obj[key] = [];
newArray.push(obj);

只需从函数实例化一个新的匿名对象

var curr = data[i],
    key = curr.Frequency.Type,
    newArray = [ { [key]: [] } ];

我意识到这是一个老问题,但对于那些通过谷歌找到这个问题的人来说,使用ES6+的方法是在对象文字中使用方括号表示法:

obj = new function () {
    this[key] = [];
};
其中打印:

const key = 'dynamicKey';
const value = 5;

const objectWithDynamicKey = {
  staticKey: 'another value',
  [key]: value 
}
console.log(objectWithDynamicKey) 
所以你的例子应该是:

{ 
  staticKey: 'another value', 
  dynamicKey: 5
}

这是一个非常常见的问题。可能的重复可能的重复这里有一个更老的问题:
var curr = data[i];
var newArray = [];
var key = curr.Frequency.Type;
var obj = { [key]: [] };
newArray.push(obj);