我正在尝试从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。这就是我使用堆栈变量的原因。 Stack将是嵌套属性。所以如果我想删除说苹果的颜色,堆栈将是json.fruit.apple.color。但它是一个字符串而不是一个对象。
无论如何,有没有人有更好的解决方案从JSON中删除对象?
答案 0 :(得分:4)
答案 1 :(得分: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;
}
}
}
}