我正在尝试创建一个通用的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];
}
}
}
使用上面的代码,我试图取出remove的内容并将其放置在主要对象的位置。
因此,如果它按预期工作,将会是这样。
let j = {
'test': 'test',
'string1' : 'hello',
'string2' : 'world'
}
这就是我目前得到的。我尝试使用delete src
,但src仅包含remove的内容,而不包含本身。所以我想知道是否有一种方法可以访问父级。
let j = {
'test': 'test',
'remove': { },
'string1' : 'hello',
'string2' : 'world'
}
这只是我想做的基本想法,所以我知道仍然有很多事情要做。但是我尝试查找此问题,但找不到解决方案。
谢谢!
答案 0 :(得分:1)
您无法从hashCode()
函数中删除父对象(按书面规定),因为它没有对hashCode()
对象的引用。 (您传入了hashCode()
,但它本身没有moveAll
。)
这将起作用:
j
现在,您的函数可以访问父对象,并且可以轻松地在末尾执行j.remove
。
答案 1 :(得分:1)
一种选择是遍历dst
的所有键,并检查它们是否指向src
。如果是,请从dst
中删除该密钥(请注意,这假定src
是dst
的直接子代)。
function moveAll(src, dst, del) {
del = del || false;
for (let item in src) {
dst[item] = src[item];
}
if (del) {
for (let k in dst) {
if (dst[k] === src) delete dst[k];
}
}
}
let j = {
'test': 'test',
'remove': {
'string1': 'hello',
'string2': 'world'
}
}
moveAll(j.remove, j, true);
console.log(j);
答案 2 :(得分:1)
一旦将它们传递到函数src和dst中,它们是2个不同的对象,因此在src上使用delete不会给您带来任何好处。您需要像下面一样删除dst.remove,但是您需要找到一种在函数中引用它的方法。
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];
}
}
delete dst.remove;
}