删除作为函数参数传递的对象属性

时间:2018-06-12 14:12:28

标签: javascript properties

我正在尝试删除对象属性:

var test = {abc: 1};
console.log(delete test.abc); //works fine and returns 'true'

以下构造让我发疯了

function deleteNode(_node) {
  console.log(delete _node);
}

deleteNode(test.abc); // does not work and returns 'false'

为什么呢?我在stackoverflow上阅读了很多关于删除问题的问题,并阅读了大多数提供的典型链接。但我无法找到解决这个简单问题的方法......

2 个答案:

答案 0 :(得分:0)

删除对象的动态道具可以这样实现:

function deleteNode(obj, key) {
  delete obj[key]
}

有关详细信息,请参阅delete docs

当有一条"路径"喜欢" a.b.c"您可以使用删除嵌套条目的lodash unset

var object = { 'a': { 'b': { 'c': 7 } } }; 
_.unset(object, 'a.b.c');

使用evaldiscouraged

答案 1 :(得分:0)



    var test = {abc: 1};
    function deleteNode(_node) {
      console.log(delete _node);
    }
    
    deleteNode(test.abc);




当您调用上面的deleteNode时,test.abc在传递给函数之前已经解析为1deleteNode从技术上讲是delete 1。根据{{​​3}},删除函数参数会导致false或在严格模式下出错。



"use strict";
var test = {a: 1};
function del(a) {
    console.log(delete a);
}
del(test.a);




您需要将对象作为方法的不同参数传递。



    var test = {abc: {a: 1, b: 2, c: {d: 1}}};
    function deleteNode(obj, key) {
      console.log(eval('delete obj.' +key));
    }
    
    deleteNode(test, 'abc.c.d');
    console.log('test is', test)