代码之家  ›  专栏  ›  技术社区  ›  Todd R

使用变量作为名称向javascript对象添加属性?

  •  235
  • Todd R  · 技术社区  · 15 年前

    我正在使用jquery从DOM中提取项,并希望使用 id dom元素的。

    例子

    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 包括具有 身份证件 我要的是“我的身份证” obj 拥有名为“MyID”的属性。上面给了我 name .

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

    11 回复  |  直到 6 年前
        1
  •  427
  •   kube    7 年前

    您可以使用以下等效语法:

    obj[name] = value
    
        2
  •  86
  •   kube    7 年前

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

    var obj = {
      [key]: value
    }
    

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

    var obj = {
      ['hello']: 'World',
      [x + 2]: 42,
      [someObject.getId()]: someVar
    }
    
        3
  •  11
  •   dnxit    10 年前

    你甚至可以列出这样的对象

    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);
    });
    
        4
  •  3
  •   KARTHIKEYAN.A    7 年前

    首先我们需要将键定义为变量,然后我们需要将键指定为对象。

    var data = {key:'dynamic_key',value:'dynamic_value'}
    var key = data.key;
    var obj = { [key]: data.value}
    console.log(obj)
        5
  •  2
  •   Momos Morbias    8 年前

    使用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" } } }
    
        6
  •  2
  •   jim birch    6 年前

    访问对象属性有两种不同的符号

    • 表示法: MyObj.Prp1
    • 支架 表示法: MyObj[〔PROP1〕〕

    点符号是快速和容易的,但你 必须 显式使用实际属性名。无替换、变量等。

    括号表示法是开放式的。它使用一个字符串,但您可以使用任何合法的JS代码生成该字符串。您可以将字符串指定为文字(尽管在本例中,点表示法更容易读取),或者以某种方式使用变量或计算。

    所以,这些都设置了 MyObji 属性命名 PROP1 价值观 你好 :

    // 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";     
    

    陷阱:

    myObj.[xxxx] = "Hello";      // wrong: mixed notations, syntax fail
    myObj[prop1] = "Hello";      // wrong: this expects a variable called prop1
    

    脱氧核糖核酸 :如果要计算或引用密钥,请 必须 使用 括号记法 . 如果要显式使用密钥,请使用 点表示法 简单明了的代码。

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

        7
  •  1
  •   woxxom    7 年前

    随着ES2015的到来 Object.assign computed property names 操作代码可以归结为:

    var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.value})));
    
        8
  •  1
  •   ARNAB    7 年前

    objectname.newProperty = value;

        9
  •  0
  •   Sruthi Poddutur    7 年前

    如果要动态地向对象添加字段,最简单的方法如下:

     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
    }
    

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

    {k1:1, k2:2, k3:3}
    
        10
  •  0
  •   robe007 Leo Aguirre    6 年前

    基于 沃克索姆 回答:这是一个使用示例:

    const data = [
        {"id": "z1", "val":10},
        {"id": "z2", "val":20},
        {"id": "z3", "val":30}
    ];
        
    const obj = Object.assign.apply({}, data.map((el, i) => ({[el.id]: el.val})));
    
    console.log(obj);
        11
  •  0
  •   Shubham Asolkar    6 年前
    const data = [{
        name: 'BMW',
        value: '25641'
      }, {
        name: 'Apple',
        value: '45876'
      },
      {
        name: 'Benz',
        value: '65784'
      },
      {
        name: 'Toyota',
        value: '254'
      }
    ]
    
    const obj = {
      carsList: [{
        name: 'Ford',
        value: '47563'
      }, {
        name: 'Toyota',
        value: '254'
      }],
      pastriesList: [],
      fruitsList: [{
        name: 'Apple',
        value: '45876'
      }, {
        name: 'Pineapple',
        value: '84523'
      }]
    }
    
    let keys = Object.keys(obj);
    
    result = {};
    
    for(key of keys){
        let a =  [...data,...obj[key]];
        result[key] = a;
    
    }