删除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数据结构。