ChatGPT解决这个技术问题 Extra ChatGPT

JavaScript 通过变量设置对象键

我在 JavaScript 中构建一些对象并将这些对象推送到一个数组中,我将我想要使用的密钥存储在一个变量中,然后创建我的对象,如下所示:

var key = "happyCount";
myArray.push( { key : someValueArray } );

但是当我尝试检查每个对象的对象数组时,键是 "key" 而不是变量键的值。有没有办法从变量中设置键的值?

小提琴以获得更好的解释:http://jsfiddle.net/Fr6eY/3/

ES6 中的解决方案是将变量放在方括号中以便对其进行评估。 var key = "happyCount"; myArray.push({ [key]: someValueArray });
@Jake 目前唯一不支持此 es6 功能的浏览器是 IE11:kangax.github.io/compat-table/es6/…
@Jake 这是一个很好的观点。一种可能的解决方案是使用 babel 将 ES6 转换为 ES5。
@Jake 这正是 babel 的用途。正如 Dan Cron 上面提到的。
@Jake 就像 Hunter 所说,最好不要为 ES5 用户编写代码。如果您需要支持旧版浏览器,请使用 pollyfill 和 transpile。现在是 2018 年,而不是 2009 年,我们真的需要继续前进。

g
gen_Eric

您需要先制作对象,然后使用 [] 设置它。

var key = "happyCount";
var obj = {};

obj[key] = someValueArray;
myArray.push(obj);

2021 年更新:

Computed property names 功能是在 ECMAScript 2015 (ES6) 中引入的,它允许您以 JavaScript 对象文字表示法动态计算对象属性的名称。

const yourKeyVariable = "happyCount";
const someValueArray= [...];

const obj = {
    [yourKeyVariable]: someValueArray,
}

@AlexG:问题中使用了它。
请注意,事情发生了变化 for the better in ES6,即 {[key]:someValueArray}
@Frank Nocke 我期待能够在大约 10 年内使用它,届时我们必须支持的所有“浏览器”都支持它......
@Jake,您今天可以在 ES6 或 ES7 中编程,并让 Babel 将您的 JS 文件编译回 ES5。这就是当今构建 webapps 的方式。
对于那些想知道如何调用 ES6 功能的人:它是 Computed property name
k
kiranvj

在 ES6 中,你可以这样做。

var key = "name";
var person = {[key]:"John"}; // same as var person = {"name" : "John"}
console.log(person); // should print  Object { name="John"}

var key = "名称"; var person = {[key]:"John"};控制台.log(人); // 应该打印 Object { name="John"}

它称为 Computed Property Names,它使用括号表示法(方括号)[] 实现

示例:{ [variableName] : someValue }

从 ECMAScript 2015 开始,对象初始值设定项语法也支持计算属性名称。这允许您将表达式放在括号 [] 中,该表达式将被计算并用作属性名称。

对于 ES5,试试这样的

var yourObject = {};

yourObject[yourKey] = "yourValue";

console.log(yourObject );

例子:

var person = {};
var key = "name";

person[key] /* this is same as person.name */ = "John";

console.log(person); // should print  Object { name="John"}

变种人 = {}; var key = "名称"; person[key] /* 这和 person.name 一样 */ = "John";控制台.log(人); // 应该打印 Object { name="John"}


我使用下划线提供了一个我认为此链接上的人们可能会感兴趣的解决方案:stackoverflow.com/questions/5640988/…
d
devtunus

用这个。

var key = 'a'
var val = 'b'

console.log({[key]:val})

//a:'b'

@kiranvj 已经给出了这个答案
我确实喜欢如何很快得到答案,而不是@kiranvjs 答案