我有以下json对象。 我试图改变属性名称forward到children 。 以下是我的代码 myJsonObj = { "name": "Laptop", "type": "hardware computer laptop", "forward": [{ "na ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试制作一个通用的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'
}
这只是我想做的基本想法,所以我知道仍然有很多事情要做。 但是我尝试查找此问题,但找不到解决方案。
提前致谢!
您不能从moveAll
函数中删除父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
的直接子代)。
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);
一旦将它们传递到函数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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.