代码之家  ›  专栏  ›  技术社区  ›  Gobliins

javascript从字符串值添加名称为的属性[重复]

  •  0
  • Gobliins  · 技术社区  · 6 年前

    是否可以使用字符串中的值向javascript/json对象添加属性?

    let myObj= {};
    
    for{prop in propsToAdd){
        myObj.addProp(prop.name, prop.type);
    }
    
    myObj.addProp = function (name, type) {
        // here i need to add another json object 
        // with the name as the name of the property
        // and a property called type with the value of the param type
    }
    

    例子:

    myObj = {}
    myObj.addProb("title","string");
    myObj.addProp("id","integer")
    

    结果应与:

    myObj = {
      "title": {
        "type": "string"
      },
      "id": {
        "type": "integer"
      },
    }
    

    我在考虑使用 JSON.stringify (一起构建字符串)和 JSON.parse .

    但如果有更优雅的方式,那就更好了。

    5 回复  |  直到 6 年前
        1
  •  1
  •   Zenoo    6 年前

    您可以简单地使用 brackets 向对象添加属性的符号:

    myObj[name] = {type: type};
    

    let myObj = {};
    
    myObj.addProp = (name, type) => {
      myObj[name] = {type: type};
    }
    
    myObj.addProp("title", "string");
    myObj.addProp("id", "integer");
    
    console.log(myObj);
        2
  •  2
  •   CertainPerformance    6 年前

    你可以这样做。注意你可能想要 addProp 两者都有,而不是 addProb :

    const myObj = {};
    // keep the function from being printed when printing the object
    Object.defineProperty(myObj, 'addProp', {
      value: function addProp(key, type) {
        myObj[key] = { type };
      },
      enumerable: false
    });
      
    myObj.addProp("title","string");
    myObj.addProp("id","integer");
    console.log(myObj);
        3
  •  1
  •   Charlie    6 年前
    myObj.addProp = function (name, type) {
       this[name] = {type: type};
    }
    

    可以通过两种不同的方式向对象添加属性。

    myObj.prop = 'val';
    myObj['prop'] = 'val'
    

    在上述功能上, this 引用要向其添加属性的对象。

        4
  •  1
  •   Nishant Dixit    6 年前

    let myObj = {};
    
    myObj.addProp = (name, type) =>  {
        myObj[name] = {type: type};
    }
    
    myObj.addProp("title","string");
    myObj.addProp("id","integer");
    
    delete myObj.addProp;
    
    console.log(myObj);
        5
  •  1
  •   Jules sarraute    6 年前

    可以使用构造函数而不是更改对象原型:

    function myObj() {
      this.addProp = function(name, type) {
        this[name] = {type: type};
      }
    }
    
    var myVal = new myObj();