Jquery或Javascript如何检查Json对象集合中是否存在某个对象?

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、标题)或(id、标题、firstName)等。

此外,为了检查现有对象,需要将字符串解析为json对象集合吗?

我尝试了这个:

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

+1 对瑞典表示赞同。我爱瑞典。 - L0j1k
1
你肯定至少尝试过自己解决它了,对吧? ;) - dfsq
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/


1
假设您需要一般解决方案,而不仅仅是针对此示例,您可以查看 Lodash (http://lodash.com) 这个高效的库,特别是它的 isEqual 函数 (http://lodash.com/docs#isEqual)。
另外,您还可以扩展上面的代码以使用任意值进行检查。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接