如何使用variables作为名称将属性添加到JavaScript对象?

我用jQuery将项目拉出DOM,并想使用DOM元素的id设置对象的属性。

 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 }) 

如果itemsFromDom包含一个id为“myId”的元素,我希望obj有一个名为“myId”的属性。 以上给我的name

如何使用JavaScript为variables命名一个对象的属性?

你可以使用这个等效的语法:

 obj[name] = value 

使用ECMAScript 2015,您可以使用括号表示直接在对象声明中进行:

 var obj = { [key]: value } 

key可以是任何forms的expression式(例如一个variables)返回一个值:

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

你甚至可以使这样的对象列表

 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); }); 

用lodash,你可以创build像这样的新对象_.set :

 obj = _.set({}, key, val); 

或者你可以像这样设置现有的对象:

 var existingObj = { a: 1 }; _.set(existingObj, 'a', 5); // existingObj will be: { a: 5 } 

如果你想在你的path中使用点(“。”),你应该小心,因为lodash可以设置层次结构,例如:

 _.set({}, "abc", "d"); // { "a": { "b": { "c": "d" } } } 

随着ES2015 Object.assign和计算的属性名称的出现,OP的代码归结为:

 var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.value}))); 

objectname.newProperty = value;

如果要dynamic添加字段到对象,最简单的方法如下:

  var params= [ {key: "k1", value=1}, {key: "k2", value=2}, {key: "k3", value=3}]; for(i=0; i< params.len; i++) { data[params[i].key] = params[i].value } 

这将创build具有以下字段的数据对象:

 {k1:1, k2:2, k3:3} 

首先,我们需要将键定义为variables,然后我们需要将键分配为对象

 var data = {key:'dynamic_key',value:'dynamic_value'} var key = data.key; var obj = { [key]: data.value} console.log(obj)