无法在Javascript中删除对象属性

Luv*_*ias 1 javascript object node.js

obj = {a: []}
Run Code Online (Sandbox Code Playgroud)

我想删除obj.a.这段代码有效

if(!obj.a.length)
    delete obj.a //work
Run Code Online (Sandbox Code Playgroud)

这不是

function _delete(o) {
    if(!o.length)
      delete o 
}

_delete(obj.a) //not work
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使它有效吗?

chr*_*con 6

您无法删除[],这是您传递给该功能的全部内容.

你可以创建一个像这样的函数

function _delete(obj, prop) {
    if (obj[prop] && ! obj[prop].length) delete obj[prop];
}
Run Code Online (Sandbox Code Playgroud)

并称之为

_delete(obj, 'a');
Run Code Online (Sandbox Code Playgroud)

我还会添加一个检查属性是什么,以及它是否存在.当你似乎以数组为目标时,添加一个检查它是否是一个传递的数组:

function _delete(obj, prop) {
    if (Array.isArray(obj[prop]) && ! obj[prop].length) delete obj[prop];
}
Run Code Online (Sandbox Code Playgroud)

  • 可能需要检查属性是否存在,以便不抛出未定义的错误检查长度 (3认同)