4

我正在尝试从 JSON 对象中删除一个对象。有没有简单的方法来做到这一点?如果我有一个对象,我可以从中删除该项目,还是将对象转换为数组并拼接它更好?各有什么优缺点。

我想写的逻辑是这样的。

function remove( delKey, delVal, o, stack){
    for(var key in o) {
        if(typeof o[key] === "object") {
            stack != undefined ? stack += "." + key : stack = key;
            remove(delKey, delVal, o[key], stack);
        } else {
            if(delKey == key && delVal == o[key]) {     
                delete o;
            }
        }
    }
}

更改代码以使用删除而不是拼接

所以这基本上是我想做的,如果有更简单的方法,请告诉我。我在这里遇到的问题是A。我不知道在哪里拼接。B.如果我做拼接,我想我不会通过递归将拼接的结果返回给其他对象。

我的问题是因为每次我不知道嵌套属性时都会有不同的 JSON。这就是我使用堆栈变量的原因。堆栈将嵌套属性。所以如果我想删除一个苹果的颜色,堆栈将是 json.fruit.apple.color。但它是一个字符串而不是一个对象。

无论如何,有没有人有更好的解决方案来从 JSON 中删除对象?

4

2 回答 2

4

您可以使用delete运算符:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

于 2013-05-31T22:28:04.917 回答
2

希望这可以帮助其他人摆脱困境。谢谢你们的帮助。

这是对我有用的答案和功能。它足够抽象,希望能帮助别人。

如果您将此函数传递给您要删除的任何键值对和解析的 JSON 对象,它将删除它并在找到并删除该项目时返回 true。

    function remove(delKey, delVal, o) {
        for (var key in o) {
            if (typeof o[key] === "object") {
                if (remove(delKey, delVal, o[key])) { return true; }
            } else {
                if (delKey == key && delVal == o[key]) {
                    delete o[key];
                    return true;
                }
            }
        }
    }
于 2013-05-31T23:47:48.580 回答