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

标签 javascript json

我正在尝试创建一个通用的 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/

相关文章:

javascript - CSV 颜色数据未呈现

javascript - Uncaught ReferenceError - 如何访问 webpack 捆绑的函数

java - 是否可以使用具有纳秒值的 Jackson

javascript - 从 Django 模板到完全休息?

javascript - Fetch API 返回状态代码 0,需要 XML 响应

javascript - (... 排除->\([\s\S]+\) ...) 的正则表达式?

javascript - 如何将大于两位数的数字传递给计算器 jQuery + HTML 中的数组

javascript - Firefox 插件 sdk 中脚本之间的通信 - self.port 不存在

c# - Newtonsoft.Json.JsonSerializationException 未由用户代码处理

javascript - 使用 Jquery/Javascript 读取 NewtonSoft Json 数据