【问题标题】:Check if an object exists twice in an array检查一个对象是否在数组中存在两次
【发布时间】:2016-12-01 10:00:55
【问题描述】:

我有一个包含具有这种结构的对象的数组:

var results = [{
    AuthorId: 2,
    Id: 89,
    caseId: 33 //some key
},...];

现在,我想检查这个数组中的对象是否存在 2 次或更多次,并将它们记录在控制台中。

我的做法:

$.each(results, function (i, result) {
    var stringRes = result.AuthorId + ";" + result.caseId;
    $.each(results, function (j, toTest) {
        if (j <= results.length - 2) {
            var stringToTest = results[j + 1].AuthorId + ";" + results[j + 1].caseId;
            if (stringToTest == stringRes) {
                console.log(result.Id);
                //some function to do something with duplicates
            }
         }
    });
});

首先,我知道制作字符串并比较它们并不是很好。其次,这将至少记录每个项目一次,因为每个项目都会相互比较(= 项目将自身与自身进行比较)。

这是否可以通过(或多或少)快速可靠的方式解决?

【问题讨论】:

    标签: javascript arrays loops compare javascript-objects


    【解决方案1】:

    您可以使用哈希表或地图进行计数。如果计数是 2 或更大,请做一些事情。作为关键,如果对象始终具有相同的结构,我建议使用字符串化对象。

    var results = [{ AuthorId: 2, Id: 89, caseId: 33 }, { AuthorId: 2, Id: 89, caseId: 33 }],
        hash = Object.create(null);
    
    results.forEach(function (a) {
        var key = JSON.stringify(a);
        hash[key] = (hash[key] || 0) + 1;
        if (hash[key] >= 2) {
            console.log('count of 2 or more of ' + key);
        }
    });

    【讨论】:

    • 您可以添加更多数据进行测试。
    • 经过 2300 项测试。 :)
    • 检查,如果结构,json字符串是否相等。
    • 哎呀,有道理 - 当然 id 是唯一的,所以多个日志是正常的。非常感谢!
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2017-08-25
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多