Javascript 更改所有子对象的位置后删除JSON父对象
我正在尝试创建一个通用JSON函数,该函数将被发送一个源、目标以及完成后是否应该删除空的父函数。问题是,我不确定在父对象为空并通过循环完成后如何删除它 我的代码正在成功地获取子项并移动它们,以及从当前父项中删除子项。我面临的问题是试图在完成后删除父对象本身Javascript 更改所有子对象的位置后删除JSON父对象,javascript,json,Javascript,Json,我正在尝试创建一个通用JSON函数,该函数将被发送一个源、目标以及完成后是否应该删除空的父函数。问题是,我不确定在父对象为空并通过循环完成后如何删除它 我的代码正在成功地获取子项并移动它们,以及从当前父项中删除子项。我面临的问题是试图在完成后删除父对象本身 let j = { 'test': 'test', 'remove': { 'string1' : 'hello', 'string2' : 'world' } } moveAll(j.remove,j,true); fu
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的内容,并将它们放置在mainobjects位置
因此,如果它按预期的那样工作,它将是这样的
let j = {
'test': 'test',
'string1' : 'hello',
'string2' : 'world'
}
这就是我目前得到的。我尝试使用删除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]
}
现在,您的函数可以访问父对象,并且可以轻松地在最后执行一个
delete obj[key]
。一个替代方法是循环检查dst
的所有键,并检查它们是否指向src
。如果是,请从dst
中删除该键(注意,这假定src
是dst
的直接子项)
函数moveAll(src、dst、del){
del=del | | false;
用于(让项目进入src){
dst【项目】=src【项目】;
}
if(del){
for(让k在dst中){
如果(dst[k]==src)删除dst[k];
}
}
}
设j={
“测试”:“测试”,
“删除”:{
'字符串1':'你好',
“string2”:“世界”
}
}
moveAll(j.remove,j,true);
控制台日志(j)代码>一旦您将它们传递到函数中,src和dst是两个不同的对象,因此在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;
}
不,没有对父对象的引用。您需要调用delete j['remove']
。但一旦你这么做了,就没有必要单独删除每一项了。谢谢,我有一种感觉,那是不可能的,但我想我还是会要求有机会的。