3
    var curr = data[i],
        newArray = [],
        key = curr.Frequency.Type,
        obj = {key: []};
    newArray.push(obj);

但是,这会产生一个带有“key”键的对象!如何使用变量值的键创建一个新对象key

4

4 回答 4

2

你可以这样做:

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

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

在对象字面量本身的 JavaScript 中没有办法做到这一点。语法只是没有提供。

编辑——当这个答案被写出来时,上面的说法是正确的,但是 ES2015 在对象初始化器中提供了动态键:

var curr = data[i],
    key = curr.Frequency.Type,
    newArray = [ { [key]: [] } ];
于 2013-09-04T15:27:53.973 回答
1

我想你的意思是这个符号:

var type = "some type";
var obj = {}; // can't do it one line
obj[type] = [];
console.log(obj); // { "some type": [] }
于 2013-09-04T15:27:50.177 回答
1

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

obj = new function () {
    this[key] = [];
};
于 2013-09-04T15:29:46.430 回答
0

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

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);
于 2019-10-03T18:14:37.447 回答