6

次のようなjson文字列が与えられます:

[{"id":28,"Title":"Sweden"},{"id":56,"Title":"USA"},{"id":89,"Title":"England"}]

オブジェクトが存在するかどうかを確認する必要があります。つまり、すべてのフィールドを確認します。

{"id":28,"Title":"Sweden"} => exists
{"id":29,"Title":"Sweden"} => doesn't exist

また

{"id":28,"Title":"Sweden"} => exists
{"id":28,"Title":"Sweden2"} => doesn't exist

コレクションには任意の数のオブジェクトを含めることができ、オブジェクトには常に同じ数のプロパティ(id、title)または(id、title、firstName)などがあります。

また、既存のオブジェクトをチェックするために、文字列を解析してjsonオブジェクトコレクションにする必要がありますか?

私はこれを試しました:

$.map(val, function (obj) {
    if (obj === val)
        alert('in');
    return obj; // or return obj.name, whatever.
});
4

3 に答える 3

2

たぶん、このようなものですか?

    function exists(obj, objs)
    {
        var objStr = JSON.stringify(obj);

        for(var i=0;i<objs.length; i++)
        {
            if(JSON.stringify(objs[i]) == objStr)
            {
                return 1;
            }
        }

        return 0;
    }


    /** some tests **/
    var x = [{"id":28,"Title":"Sweden"},{"id":56,"Title":"USA"},{"id":89,"Title":"England"}];
    var has = {"id":28,"Title":"Sweden"};
    var not = {"id":28,"Title":"Sweden2"};

    /* alerts yes */
    if(exists(has, x)) alert('yes');
    else alert('no');

    /* alerts no */
    if(exists(not, x)) alert('yes');
    else alert('no');

http://jsfiddle.net/zdhyf/

于 2013-02-28T09:21:15.830 に答える
1

コレクション内のオブジェクトのプロパティが、探しているオブジェクトと常に同じ順序であることが確実な場合は、オブジェクトの存在を確認する代わりに、サブストリングを検索できます。

var json = '[{"id":28,"Title":"Sweden"},{"id":56,"Title":"USA"},{"id":89,"Title":"England"}]',
obj1 = {"id":28,"Title":"Sweden"},
obj2 = {"id":29,"Title":"Sweden"};

alert(json.indexOf(JSON.stringify(obj1)) >= 0 ? 'Yes' : 'No'); // Yes
alert(json.indexOf(JSON.stringify(obj2)) >= 0 ? 'Yes' : 'No'); // No
于 2013-02-28T09:18:33.357 に答える
1

例だけでなく、一般的な解決策が必要であると仮定すると、そのような操作のためのパフォーマンスの高いライブラリである lodash ( http://lodash.com )、特に isEqual 関数 ( http://lodash.com/ docs#isEqual )。

または、上記のコードを拡張して、任意の値を使用してチェックすることもできます。

于 2013-02-28T09:06:45.243 に答える