我正在尝试创建一个通用的 JSON 函数,该函数会发送源、目标以及完成后是否应删除空父级。问题是我不确定如何在父对象为空并通过循环完成后删除它。
我的代码成功地获取了子级并移动了它们,以及从当前父级中删除了子级。我面临的问题是尝试在完成后删除父级本身。
let j = {
'test': 'test',
'remove': { 'string1' : 'hello', 'string2' : 'world' }
}
moveAll(j.remove,j,true);
function moveAll(src, dst, del) {
del = del || false;
for ( let item in src ) {
dst[item] = src[item];
if(del) {
delete src[item];
}
}
}
通过上面的代码,我尝试获取删除的内容并将它们放置在主要对象位置。
所以如果它按预期工作的话就会像这样。
let j = {
'test': 'test',
'string1' : 'hello',
'string2' : 'world'
}
这就是我目前得到的。我尝试使用delete src
,但src只包含remove的内容,而不包含remove本身。所以我想知道是否有办法访问父级。
let j = {
'test': 'test',
'remove': { },
'string1' : 'hello',
'string2' : 'world'
}
这只是我想做的事情的基本想法,所以我知道还有很多事情需要做。但我尝试查找这个问题并找不到解决方案。
提前致谢!
最佳答案
您无法从 moveAll
函数(按书面形式)删除父级,因为它没有对 j
对象的任何引用。 (您传入 j.remove
,但它本身没有 j
。)
这会起作用:
moveAll(j, 'remove', j, true);
function moveAll(obj, key, dst, del) {
src = obj[key]
del = del || false;
for ( let item in src ) {
dst[item] = src[item];
if(del) {
delete src[item];
}
}
if (del)
delete obj[key]
}
现在您的函数可以访问父对象,并且可以轻松地在最后执行删除 obj[key]
操作。
关于javascript - 更改所有子对象的位置后删除 JSON 父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306705/