JQuery или Javascript проверяют, существует ли объект в коллекции объектов Json

учитывая строку 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.
});

3 ответов


что-то вроде этого?

    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/


предполагая, что вам нужно общее решение, а не только для примера, вы можете проверить lodash (http://lodash.com ), которая является библиотекой исполнителей для таких операций и, в частности, функцией isEqual (http://lodash.com/docs#isEqual).

кроме того, вы можете расширить приведенный выше код, чтобы использовать произвольные значения для проверки.


Если вы уверены, что свойства объектов в коллекции всегда находятся в том же порядке, что и в объекте, который вы ищете, вы можете искать подстроку вместо проверки наличия объекта:

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