我用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”的属性。上面给了我名字。

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


当前回答

首先我们需要将key定义为变量,然后我们需要将key赋值为对象。例如, Var数据= {key:'dynamic_key',value:'dynamic_value'} Var key = data.key; Var obj = {[key]: data.value} console.log (obj)

其他回答

使用lodash,你可以创建一个像这样的_.set对象:

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

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

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

如果你想在路径中使用点("."),你应该小心,因为lodash可以设置层次结构,例如:

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

首先我们需要将key定义为变量,然后我们需要将key赋值为对象。例如, Var数据= {key:'dynamic_key',value:'dynamic_value'} Var key = data.key; Var obj = {[key]: data.value} console.log (obj)

你甚至可以像这样创建对象列表

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

如果你有对象,你可以做数组的键,然后映射,并创建新的对象从以前的对象键,和值。

Object.keys(myObject)
.map(el =>{
 const obj = {};
 obj[el]=myObject[el].code;
 console.log(obj);
});

如果你想动态地给一个对象添加字段,最简单的方法如下:

let params = [
  { key: "k1", value: 1 },
  { key: "k2", value: 2 },
  { key: "k3", value: 3 },
];
let data = {};

for (let i = 0; i < params.length; i++) {
  data[params[i].key] = params[i].value;
}

console.log(data); // -> { k1: 1, k2: 2, k3: 3 }