Javascript从字符串值添加名称属性

时间:2018-05-28 09:53:44

标签: javascript json

是否可以使用字符串中的值向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 个答案:

答案 0 :(得分:2)

你可以这样做。请注意,两者都可能需要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);

答案 1 :(得分:1)

您只需使用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 :(得分:1)

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

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

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

在上面的函数中,this指的是要添加属性的对象。

答案 3 :(得分:1)

let myObj = {};

myObj.addProp = (name, type) =>  {
    myObj[name] = {type: type};
}

myObj.addProp("title","string");
myObj.addProp("id","integer");

delete myObj.addProp;

console.log(myObj);

答案 4 :(得分:1)

您可以使用构造函数而不是alter Object prototype:

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

var myVal = new myObj();