1

こんにちは、私は非常に単純な JSON 削除関数を作成しようとしており、JSON を再帰的にトラバースしています。キーと値のペアの一致が見つかったら、JSON でペアを削除し、ペアが削除されていることが判明した場合は true を返します。私が抱えている問題は、リターンが再帰スタックを完全に上回らないことです。私はこれを行うだけではいけないことを理解しています...

return true;

しかし、関数全体を返したくありません。このようなことをする必要がありますか?

return this.true;

また、JSON の残りの検索を続行する代わりに、KV ペアの一致が見つかった後に再帰を中断したいと考えています。現在、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 からの削除に関する再帰とタンジェントのヘルプを前もって感謝します。

4

2 に答える 2