有什么方法可以使用 Lodash 从嵌套对象中删除属性
Is there any way to remove properties from nested objects using 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 的对象中删除 属性。例如,在上面的代码中, pool_1
应该从 mode1' and
mode3`
中删除
步骤 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 );
我有一个类似于下面的对象,
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 的对象中删除 属性。例如,在上面的代码中, pool_1
应该从 mode1' and
mode3`
步骤 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 );