繁体   English   中英

更改所有子代的位置后删除JSON父对象

Remove JSON parent object after changing the location of all children

提示:本站收集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'
}

这只是我想做的基本想法,所以我知道仍然有很多事情要做。 但是我尝试查找此问题,但找不到解决方案。

提前致谢!

3 个回复

您不能从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删除该密钥(请注意,这假定srcdst的直接子代)。

 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;
}
2 如何访问JSON对象的子代?

好吧,所以,我有这个JSON文件 我需要遍历列表并检查该品种的数组是否为空。 我以前使用过JSON文件,但是这些列表通常都在某种形式的Arraylist中,它允许我简单地遍历它,但我不确定在这种情况下我应该做什么。 有没有办法选择消息的所有“子”。 这就是我到目前为止所 ...

3 当所有子项都消失后自动删除父对象行

在PostgreSQL 8.3数据库中,我有“ bookings”表,通过ID引用“ booking_transactions”表。 这样每个预订都属于一次交易。 可以从数据库中删除预订。 当所有引用其的“ bookings”行都消失时,如何确保自动删除“ booking_transa ...

6 如何显示JSON对象的ID和子代?

标题听起来不太清楚,但是我试图在ID s的警报中显示树的JSON ,如果ID “有”孩子,我将添加孩子一词,当“组”完成后,我将添加| 表示小组结束了,问题是我找不到添加方法| 当小组结束时。 因此,这棵树: 将显示为: 1,children,3,7,2 | 4,ch ...

7 为什么我不能更改移动对象的位置,也不能更改父对象的位置?

主要目标是能够更改每个楼梯0、1、2、3、4 ... 12和/或每个楼梯孩子的位置。 例如,我不能更改“楼梯0”的位置,并且不能更改任何孩子。 该脚本附加到楼梯0:此脚本使子对象移动。 如果禁用并且不使用此脚本,则可以移动楼梯0和子级。 但是启用脚本后,我将无法执行。 ...

8 如果所有子代均折叠,我该如何折叠父级内容

如果每个孩子都被折叠,我想显示/折叠一个面板(Stakpanel,Grid等),如果它的孩子再次可见,则至少显示一个面板。 哪一种是实现这一目标的最佳方法? (转换器,触发器,其他东西?)谢谢! 我做了一个转换器,但是当我改变孩子们的视野时,它不会启动 这是xaml的例子 ...

2015-03-17 08:15:20 1 1056   wpf/ xaml
9 如何删除Biztalk映射中没有任何子代的父记录?

想象一下,您具有以下源数据,并且Box和它的Cakes之间具有父子关系。 目标是正确删除目标中不包含蛋糕的框(例如框2),同时保持在图形映射器中正确映射Cake元素及其子标签的能力(因此无需使用原始XSLT表达式防止这种情况)。 有没有使用functoids做到这一点的好方法? ...

10 父位置更改时,jQuery删除元素

我正在制作一个带有导航栏的网站,当导航栏到达页面的顶部(用户向下滚动)时,会出现一个符号;当导航栏离开页面的顶部(用户向上滚动)时,该符号会消失。 到目前为止,我可以使该符号出现但不能重新出现。 以下是导航的js代码和HTML: $(document).ready(fun ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM