我编写了一个函数,根据给定的属性的“路径”及其自身的“键”,动态删除嵌套对象的属性。
很显然,我的代码不够动态,因为我使用的是if
,它不够动态。而且它仅支持对象的已定义部门(按if的数量
我需要您的专业意见来更正我的代码:
下面是代码:
var deleteProp = function (path, prop) {
console.log(path)
let keys = path.split('.');
console.log(keys)
if(keys.length == 1){
delete object[keys[0]]
}
if(keys.length == 2){
delete object[keys[0]][keys[1]]
}
if(keys.length == 3){
delete object[keys[0]][keys[1]][keys[2]]
}
if(keys.length == 4){
delete object[keys[0]][keys[1]][keys[2]][keys[3]]
}
}
一些附带信息,我确实提到了this post,但是let parent = keys.reduce((obj, key) => obj[key], jsonObj);
并没有按预期工作。 parent
的值在某种程度上变成了键的值之一,而不是为我构造“路径”(我不知道为什么)。这就是我实现该帖子中代码的方式:
var deleteProp = function (path, prop) {
console.log(path)
let keys = path.split('.');
console.log(keys)
let parent = keys.reduce((obj, key) => obj[key], jsonObj) //jsonObj is the nested JSON.
console.log(parent) // show the value of the key only
delete parent[prop]
}
对于那些不知道什么是嵌套对象的人,请参考以下示例:
const object1 = {
a: 1,
b: 2,
c: 3,
d: {
x: 1,
y: 2,
z: {
aa: 1,
bb: 2,
cc: 3
}
},
e:4,
f:{
dd:1,
ee:2,
ff:3,
gg:{
xx:1,
yy:2,
zz:3
}
},
g:[
{a:1},
{b:2},
{c:3}
]
};
对于那些好奇为什么要这么做的人:
因为我有一个函数,当我查找"a.f.gg"
时,它会以字符串形式返回"yy"
之类的路径。在获得路径和属性之后,现在我要删除它。
谢谢。