删除Javascript对象中所有具有特定名称的子对象(在任何级别)的最有效方法是什么?

删除Javascript对象中所有具有特定名称的子对象(在任何级别)的最有效方法是什么?,javascript,Javascript,给定这样一个物体,它的结构并不总是完全相同 data: { deleteMe: true, level1: { level2: { deleteMe: true, level3: { level4: { level5: { deleteMe: true

给定这样一个物体,它的结构并不总是完全相同

data: {
    deleteMe: true,
    level1: {
         level2: {
             deleteMe: true,
             level3: {
                 level4: {
                     level5: {
                         deleteMe: true
                     }
                 }
             }
         }
    }
}

在Javascript中,循环遍历整个对象最有效的方法是什么,它允许我删除所有名为
deleteMe

的属性递归遍历对象:

function remove_deleteMe(o) {
    if (o && typeof o === 'object') {
        delete o.deleteMe;
        Object.keys(o).forEach(function(k) { remove_deleteMe(o[k]); });
    }
}
或者,如果您希望指定要删除的属性的名称:

function removeProp(o, propName) {
    if (o && typeof o === 'object') {
        delete o[propName];
        Object.keys(o).forEach(function(k) { removeProp(o[k], propName); });
    }
}

removeProp(data, 'deleteMe');
实际上@adeneo的方法更简洁易读,利用了
for…in
在非对象上工作的事实。采取一些自由:

function removeProp(o, propName) {
    for (var k in o) {
        if (k === propname) delete o[k]; 
        removeProp(o[k], propName);
    }
}

递归遍历对象:

function remove_deleteMe(o) {
    if (o && typeof o === 'object') {
        delete o.deleteMe;
        Object.keys(o).forEach(function(k) { remove_deleteMe(o[k]); });
    }
}
或者,如果您希望指定要删除的属性的名称:

function removeProp(o, propName) {
    if (o && typeof o === 'object') {
        delete o[propName];
        Object.keys(o).forEach(function(k) { removeProp(o[k], propName); });
    }
}

removeProp(data, 'deleteMe');
实际上@adeneo的方法更简洁易读,利用了
for…in
在非对象上工作的事实。采取一些自由:

function removeProp(o, propName) {
    for (var k in o) {
        if (k === propname) delete o[k]; 
        removeProp(o[k], propName);
    }
}

只需递归迭代并删除

function remove(obj, what) {
    (function stuff(o) {
        for (var key in o) 
            key && key == what ? delete o[key] : stuff(o[key]);
    })(obj);
}

只需递归迭代并删除

function remove(obj, what) {
    (function stuff(o) {
        for (var key in o) 
            key && key == what ? delete o[key] : stuff(o[key]);
    })(obj);
}

你是说“最有效的方法”还是“某种方法”?你试过什么?这没道理。如果结构不是约定的,那么该对象有什么意义呢?@SterlingArcher举例来说,在这种情况下,将对象视为广义树。为什么要强制执行结构模式?例如,trie数据结构。你是说“最有效的方法”还是“某种方法”?你试过什么?这没道理。如果结构不是约定的,那么该对象有什么意义呢?@SterlingArcher举例来说,在这种情况下,将对象视为广义树。为什么要强制执行结构模式?例如,trie数据结构。