首页 > 解决方案 > 搜索 JavaScript 对象列表并确定它们是否包含相同值的最有效方法是什么?

问题描述

我有以下函数,它接受用户输入的一些值并根据这些值创建 JavaScript 对象,然后将这些对象放入数组中并返回数组:

function createObjects() {
    var objectArray = []; 
    for (var i = 0; i < someCount; i++) {
        var object = {
            property1: someProperty1, 
            property2: someProperty2,
            property3: someProperty3,
            property4: someProperty4
        };
        objectArray.push(object);
    }
    return objectArray;
}

现在,我想比较这些对象的属性并确定是否有任何两个包含所有相同的property1property2property3和值property4。如果这些对象中的任何两个具有这些属性的所有四个相同值,我希望验证检查返回false。这是我到目前为止所拥有的:

function objectsAreUnique() {
    var objects = createObjects(); 
    for(var i = 0; i < objects.length; i++) {
        //need to determine whether all four of the properties are the same for any two objects
        //if(objectsAreSame) { return false; } 
    }
    return true; 
}

我有一些想法,但我很想看看实现这一目标的最有效方法是什么。谢谢!

标签: javascript

解决方案


如果您可以保证始终以相同的顺序插入属性(如果在您的示例中使用对象文字就是这种情况),您可以在 ~O(n) usingJSON.stringify和 a中执行此操作Set

function objectsAreUnique() {
    const objects = createObjects();
    return (new Set(objects.map(o => JSON.stringify(o)))).size == objects.length;
}

推荐阅读