嘿伙计们,我正在尝试编写一个非常简单的 JSON 删除函数,并且我正在递归地遍历 JSON。当我找到一个键值对匹配时,我想删除 JSON 中的该对并返回 true 以表明该对已被删除。我遇到的问题是返回并没有一路向上递归堆栈。我意识到我不能只是这样做......
return true;
但我不想返回整个函数。我需要做这样的事情吗?
return this.true;
我还想在找到 KV 对匹配后中断递归,而不是继续搜索 JSON 的其余部分。目前它正在继续通过 JSON 的其余部分。找到匹配项后是否可以中断递归?
这是一些代码,希望它更清楚。
deleteItems: function (toDelete) {
self = this;
var keys = toDelete.find(".key");
var vals = toDelete.find(".val");
for (var i = 0; i < keys.length; i++) {
$.each(this.json, function (key, val) {
console.log(keys[i].value + " : " + vals[i].value);
});
}
function remove(delKey, delVal, o) {
console.log(delKey + " : " + delVal);
for (var key in o) {
if (typeof o[key] === "object") {
console.log(key + " : [");
remove(delKey, delVal, o[key]);
} else {
if (delKey == key && delVal == o[key]) {
console.log("delete match: " + delKey + " : " + delVal + " , " + key + " : " + o[key]);
//delete this item.
return "true";
}
}
}
}
console.log(remove(keys[0].value, vals[0].value, this.json));
},
此外,如果其他人有更简单的方法来使用 javascript 从 JSON 中删除 KV 对,我很想听听,那么必须有一种更简单的方法,然后简单地遍历整个事物并删除 KV 对。现在实际上看这个,我认为它不适用于嵌套对象/列表。例如,如果 KV 对嵌套在我认为无法删除 json[key] 的对象中,我需要跟踪有关它的对象的键,因此需要删除 json.obj1。 obj2[键]。
提前感谢您对递归的帮助以及关于从 JSON 中删除的切线。