使用变量作为名称将属性添加到JavaScript对象?

Tod*_*d R 257 javascript syntax jquery object

我使用jQuery从DOM中提取项目,并希望使用idDOM元素在对象上设置属性.

const obj = {}

jQuery(itemsFromDom).each(function() {
  const element = jQuery(this)
  const name = element.attr('id')
  const value = element.attr('value')

  // Here is the problem
  obj.name = value
})
Run Code Online (Sandbox Code Playgroud)

如果itemsFromDom包含一个带有id"myId" 的元素,我想要obj一个名为"myId"的属性.以上给了我name.

如何使用JavaScript使用变量命名对象的属性?

CMS*_*CMS 451

您可以使用此等效语法:

obj[name] = value
Run Code Online (Sandbox Code Playgroud)

  • 这个语法有名字吗?或者我可以阅读更多内容的链接? (3认同)
  • @Pixelsmith,它们被称为计算属性名称。 (3认同)

kub*_*ube 108

使用ECMAScript 2015,您可以使用括号表示法直接在对象声明中执行此操作:

var obj = {
  [key]: value
}
Run Code Online (Sandbox Code Playgroud)

哪里key可以是任何类型的表达式(例如变量)返回值:

var obj = {
  ['hello']: 'World',
  [x + 2]: 42,
  [someObject.getId()]: someVar
}
Run Code Online (Sandbox Code Playgroud)

  • 这个特殊的问题可能是关于修改但是它被其他关于动态创建对象的问题所引用,所以我最终在这里并且很高兴从这个答案中受益. (26认同)
  • 这个问题是关于修改现有对象,而不是创建新对象. (13认同)
  • @wOxxOm大声笑是的,当我只能使用您的建议时,为什么要经历obj [name] = value`的麻烦 (2认同)
  • 我不确定ECMAScript 6是什么,但我非常感谢 (2认同)
  • @ArthurTarasov:ECMAScript 6更正式地称为ECMAScript 2015(“ ES2015”),也称为ECMAScript 6th Edition(“ ES6”)。这是2015年6月发布的JavaScript规范。从那时起,我们有了ES2016,很快我们将拥有ES2017,它们现在处于每年周期。 (2认同)

dnx*_*xit 12

您甚至可以像这样制作对象列表

var feeTypeList = [];
$('#feeTypeTable > tbody > tr').each(function (i, el) {
    var feeType = {};

    var $ID = $(this).find("input[id^=txtFeeType]").attr('id');

    feeType["feeTypeID"] = $('#ddlTerm').val();
    feeType["feeTypeName"] = $('#ddlProgram').val();
    feeType["feeTypeDescription"] = $('#ddlBatch').val();

    feeTypeList.push(feeType);
});
Run Code Online (Sandbox Code Playgroud)


jim*_*rch 6

访问对象属性有两种不同的表示法

  • 符号:myObj.prop1
  • 括号表示法:myObj["prop1"]

点表示法既快速又简单,但您必须明确使用实际的属性名称。没有替换,变量等。

括号表示法是开放式的。它使用字符串,但您可以使用任何合法的 js 代码生成字符串。您可以将字符串指定为文字(尽管在这种情况下点符号会更容易阅读)或使用变量或以某种方式计算。

因此,这些都将名为prop1myObj属性设置为值Hello

// quick easy-on-the-eye dot notation
myObj.prop1 = "Hello";

// brackets+literal
myObj["prop1"] = "Hello";

// using a variable
var x = "prop1"; 
myObj[x] = "Hello";                     

// calculate the accessor string in some weird way
var numList = [0,1,2];
myObj[ "prop" + numList[1] ] = "Hello";     
Run Code Online (Sandbox Code Playgroud)

陷阱:

myObj.[xxxx] = "Hello";      // wrong: mixed notations, syntax fail
myObj[prop1] = "Hello";      // wrong: this expects a variable called prop1
Run Code Online (Sandbox Code Playgroud)

tl;dnr:如果要计算或引用密钥,则必须使用括号表示法。如果您明确使用密钥,则使用点符号表示简单明了的代码。

注意:还有一些其他好的和正确的答案,但我个人发现它们有点简短,因为对 JS 的即时怪癖不太熟悉。这可能对某些人有用。