步骤1:我需要从与value_array匹配的OBJ中删除属性。例如,在上面的代码中,应从
pool_1
中删除mode1' and
obj
的所有键,然后将空键推入新数组。例如,在上述代码中,应将mode3
添加到一个新数组中,例如["mode3"]
["mode3"]
b,因为mode3
有空对象。
使用for循环时,这正在工作。但是我需要使用一些简单的方法(例如Lodash或ES6方法)来实现这一目标。任何帮助将不胜感激。 像下面一样的trimfor (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 );
正确的答案是这个
const a = {"a.b":{"c.d":"test"}}
_.omit(a, "['a.b']['c.d']") // a.b:{}