如何使用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)