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/

相关文章:

php - Laravel 5.2 中返回列值

json - JMS 将 ArrayCollection 序列化为对象

javascript - React-datepicker 打开延迟 onClick

javascript - 如何修复 $scope 选择选项数组中的未定义结果?

javascript - 使用 JavaScript 识别独特的命中

java - 通过继承将嵌套/递归 JSON 反序列化为 Java 对象

php - 为什么 JSON 值在 PHP 中不显示?

javascript - 使用单选按钮根据表单输入转到 URL

javascript - 是否可以按名称删除 anchor ?

java - Android 中的 Json 解析和 Nullable int 值