是否有任何方法可以使用Lodash从嵌套对象中删除属性



我有一个类似于下面的对象,

let obj = {
"mode1":{
"pool_1":[
{ "id":115 },
],
"pool_2":[
{ "id":116 }
],
"pool_4":[
{ "id":117 }
],
},
"mode2":{
"pool_6":[
{ "id":122 }
]
},
"mode3":{
"pool_1":[
{ "id":123 }
]
},
"AWS":{
"cloud":[]
},
"Azure":{
"cloud":[]
}
}
let value_array = ["pool_1"];

这里,

步骤1:我需要从与value_array匹配的obj中删除属性。例如,在上面的代码中,pool_1应该从mode1' and模式3`中删除

步骤2:需要检查obj的所有密钥,并将空密钥推入新数组。例如,在上面的代码中,mode3应该被添加到像["mode3"]一样的新阵列中

输出应该如下,

["mode3"]

因为mode3具有空对象。

这在使用for循环时起作用。但我需要使用一些简单的方法,比如Lodash或Es6方法来实现这一点。任何帮助都将不胜感激。

尝试如下,

for (var key in obj) {
for (var keys in obj[key]) {
value_array.forEach(function (item) {
if(keys == item){
console.log(key)
delete obj[key][keys]
}
console.log("ALL THE DETALS AFTER DELETE", obj)
});
}
}

我们可以创建一个函数,deleteRecursive或类似的东西,遍历对象并删除所需的键。

我们还将建立一个空键列表。

function deleteRecursive(input, keysToDelete, inputKey = "", emptyKeys = []) {
for(let key of Object.keys(input)) {
if (keysToDelete.includes(key)) { 
delete input[key];
if (Object.keys(input).length === 0) emptyKeys.push(inputKey)
}
if (typeof input[key] === 'object') {
deleteRecursive(input[key], keysToDelete, key, emptyKeys)
}
}
return emptyKeys;
}
let obj = { "mode1":{ "pool_1":[ { "id":115 }, ], "pool_2":[ { "id":116 } ], "pool_4":[ { "id":117 } ], }, "mode2":{ "pool_6":[ { "id":122 } ] }, "mode3":{ "pool_1":[ { "id":123 } ] }, "AWS":{ "cloud":[] }, "Azure":{ "cloud":[] } }
let value_array = ["pool_1"];
const emptyKeys = deleteRecursive(obj, value_array)
console.log("Obj after deletion:", obj);
console.log("Empty keys:", emptyKeys );

最新更新