【问题标题】:JavaScript set object key by variable [duplicate]JavaScript通过变量设置对象键[重复]
【发布时间】:2012-07-15 13:06:09
【问题描述】:

我在 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 年,我们真的需要继续前进。

标签: javascript


【解决方案1】:

你需要先制作对象,然后使用[]进行设置。

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。这就是当今构建 Web 应用程序的方式。
  • 对于那些想知道如何调用这个 ES6 特性的人:它是 Computed property name
【解决方案2】:

在 ES6 中,你可以这样做。

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

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

它被称为计算属性名称,它使用括号表示法(方括号)[]实现

示例:{ [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 person = {};
    var key = "name";
    
    person[key] /* this is same as person.name */ = "John";
    
    console.log(person); // should print  Object { name="John"}

【讨论】:

猜你喜欢
  • 2022-04-14
  • 2012-09-21
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 2019-02-12
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多