有什么方法可以使用 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 );