有任何方法可以使用lodash删除嵌套对象的属性 我有一个类似于下面的对象, 令obj = { “模式1”:{ “ pool_1”:[ {“ id”:115}, ],, “ pool_2”:[ {“ id” ...

问题描述 投票:0回答:1
Here,

步骤1
:我需要从与value_array匹配的OBJ中删除属性。例如,在上面的代码中,应从

pool_1

Mode3`

中删除mode1' and

步长2:需要检查
obj
的所有键,然后将空键推入新数组。例如,在上述代码中,应将

mode3

添加到一个新数组中,例如["mode3"]

输出应如下所示,
["mode3"]

b,因为

mode3

有空对象。

使用for循环时,这正在工作。但是我需要使用一些简单的方法(例如Lodash或ES6方法)来实现这一目标。任何帮助将不胜感激。 像下面一样的trim
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)
          });
  }
}

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

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

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 );
javascript ecmascript-6 lodash
1个回答
1
投票

正确的答案是这个

const a = {"a.b":{"c.d":"test"}} _.omit(a, "['a.b']['c.d']") // a.b:{}

© www.soinside.com 2019 - 2025. All rights reserved.