JS动态访问和删除嵌套对象属性

时间:2018-08-26 15:45:07

标签: javascript object

我编写了一个函数,根据给定的属性的“路径”及其自身的“键”,动态删除嵌套对象的属性。

很显然,我的代码不够动态,因为我使用的是if,它不够动态。而且它仅支持对象的已定义部门(按if的数量

我需要您的专业意见来更正我的代码:

下面是代码:

var deleteProp = function (path, prop) {
    console.log(path)
    let keys = path.split('.');
    console.log(keys)
    if(keys.length == 1){
      delete object[keys[0]]
    }
    if(keys.length == 2){
      delete object[keys[0]][keys[1]]
    }
    if(keys.length == 3){
      delete object[keys[0]][keys[1]][keys[2]]
    }
    if(keys.length == 4){
      delete object[keys[0]][keys[1]][keys[2]][keys[3]]
    }
  }

一些附带信息,我确实提到了this post,但是let parent = keys.reduce((obj, key) => obj[key], jsonObj);并没有按预期工作。 parent的值在某种程度上变成了键的值之一,而不是为我构造“路径”(我不知道为什么)。这就是我实现该帖子中代码的方式:

var deleteProp = function (path, prop) {
    console.log(path)
    let keys = path.split('.');
    console.log(keys)
    let parent = keys.reduce((obj, key) => obj[key], jsonObj) //jsonObj is the nested JSON.
    console.log(parent) // show the value of the key only
    delete parent[prop]
}

对于那些不知道什么是嵌套对象的人,请参考以下示例:

const object1 = {
  a: 1,
  b: 2,
  c: 3,
  d: {
    x: 1,
    y: 2,
    z: {
      aa: 1,
      bb: 2,
      cc: 3
    }
  },
  e:4,
  f:{
    dd:1,
    ee:2,
    ff:3,
    gg:{
      xx:1,
      yy:2,
      zz:3
    }
  },
  g:[
    {a:1},
    {b:2},
    {c:3}
  ]
};

对于那些好奇为什么要这么做的人: 因为我有一个函数,当我查找"a.f.gg"时,它会以字符串形式返回"yy"之类的路径。在获得路径和属性之后,现在我要删除它。

谢谢。

0 个答案:

没有答案