按键从对象中删除

时间:2017-03-10 13:49:29

标签: javascript node.js

我正在尝试按键从对象中删除属性。

注意到我的变量中有密钥非常重要,我无法执行以下操作:

delete obj.test.a

这是我的代码(不起作用)

var obj = {
 b: 2,
   test: {
      a: 1
   }
}

var abc = 'test.a';

delete obj[abc];

console.log(obj);

如何在没有硬编码的情况下删除obj.test.a,而是从变量中取出密钥。

3 个答案:

答案 0 :(得分:1)

您可以先将字符串拆分为数组,然后使用reduce()匹配要删除的对象并将其删除。

var obj = {"b":2,"test":{"a":1}}

var abc = 'test.a'.split('.')
abc.reduce(function(r, e, i) {
  if(i == abc.length - 1) delete r[e]
  return r[e]
}, obj)

console.log(obj);

这可能是更优雅的方法

var obj = {"b":2,"test":{"a":1}}

'test.a'.split('.').reduce(function(r, e, i, arr) {
  return arr[i + 1] ? r[e] : (delete r[e])
}, obj)

console.log(obj);

答案 1 :(得分:0)

解释我的评论的例子:

var obj = {
   test: {
      a: 'hello'
   }
};

function deleteProp(obj, path) {
   var props = path.split('.');
   var currentObj = obj;
   for(var i = 0; i < props.length; i++) {
      var prop = props[i];
      if(i == props.length - 1) {
         delete currentObj[prop];
      } else {
         currentObj = currentObj[prop];
      }
   }
}

deleteProp(obj, 'test.a');
console.log(obj); // { test: {} }

答案 2 :(得分:-1)

delete obj.test.a适合我: enter image description here