ors*_*zky 4 javascript object lodash
假设我有嵌套对象,例如:
var obj = {
"items":[
{
"name":"Item 1",
"value": "500",
"options": [{...},{...}]
},
{
"name":"Item 2",
"value": "300",
"options": [{...},{...}]
}
],
"name": "Category",
"options": [{...},{...}]
};
Run Code Online (Sandbox Code Playgroud)
我想从所有对象的任何深度删除选项属性。对象可以嵌套在对象内,也可以嵌套在数组内。
我们目前在项目中使用Lodash,但我对任何解决方案感到好奇。
没有实现此目的的直接方法,但是您可以使用以下功能从JSON中删除密钥。
function filterObject(obj, key) {
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
filterObject(obj[i], key);
} else if (i == key) {
delete key;
}
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用
var newObject = filterObject(old_json, "option");
Run Code Online (Sandbox Code Playgroud)
修改上述解决方案,删除在我的 JSON 中多次出现的“ dataID ”。下面提到的代码工作正常。
var candidate = {
"__dataID__": "Y2FuZGlkYXRlOjkuOTI3NDE5MDExMDU0Mjc2",
"identity": {
"__dataID__": "aWRlbnRpdHk6NjRmcDR2cnhneGE3NGNoZA==",
"name": "Sumanth Suvarnas"
},
};
candidate = removeProp(candidate, "__dataID__")
console.log(JSON.stringify(candidate, undefined, 2));
function removeProp(obj, propToDelete) {
for (var property in obj) {
if (typeof obj[property] == "object") {
delete obj.property
let newJsonData= this.removeProp(obj[property], propToDelete);
obj[property]= newJsonData
} else {
if (property === propToDelete) {
delete obj[property];
}
}
}
return obj
}Run Code Online (Sandbox Code Playgroud)
小智 6
对 void 的答案进行一点修改,允许删除也是对象的属性
function filterObject(obj, key) {
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (i == key) {
delete obj[key];
} else if (typeof obj[i] == 'object') {
filterObject(obj[i], key);
}
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)