javascript - 搜索 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;
}
现在,我想比较这些对象的属性并确定是否有任何两个包含所有相同的property1
、property2
、property3
和值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;
}
我有一些想法,但我很想看看实现这一目标的最有效方法是什么。谢谢!
解决方案
如果您可以保证始终以相同的顺序插入属性(如果在您的示例中使用对象文字就是这种情况),您可以在 ~O(n) usingJSON.stringify
和 a中执行此操作Set
:
function objectsAreUnique() {
const objects = createObjects();
return (new Set(objects.map(o => JSON.stringify(o)))).size == objects.length;
}