1、使用 Array.some() 方法和自定义比较函数:
使用
Array.some()方法遍历数组,对每个元素执行自定义的比较函数。比较函数使用Array.findIndex()方法来查找与当前元素相等且索引不同的元素,如果找到则表示存在重复元素。
const array = [
{ value: '值1' },
{ value: '值2', key: 1688713651911 },
{ value: '值2', key: 1688713651347 }
]
// 判断对象数组是否有相同属性 相同:true \ 不相同:false
hasDuplicates(array) {
return array.some((item, index) => {
return (
array.findIndex((v, i) => {
return (
i !== index &&
JSON.stringify(v.value) === JSON.stringify(item.value)
)
}) !== -1
)
})
}
console.log(hasDuplicates(array)); //true
2、使用 Set 数据结构:
使用
Set数据结构来去除重复元素,并比较Set的长度与原数组的长度是否相等,如果不相等则表示存在重复元素。
const array = [{ name: '值1' }, { name: '值2' }, { name: '值2' }];
function hasDuplicates(array) {
// array.map(JSON.stringify):对数组进行映射操作,将每个对象元素转换为相应的字符串表示。
// new Set(...) 它类似于数组,但只包含唯一的值,不会有重复项。
const set = new Set(array.map(JSON.stringify));
return set.size !== array.length;
}
console.log(hasDuplicates(array)); // true
请注意,这些方法中的比较函数使用 JSON.stringify() 来将对象转换为字符串进行比较。这种方法适用于包含简单属性的对象,如果对象中包含函数或循环引用等复杂情况,需要使用其他方式来比较对象的相等性。

文章介绍了如何检查包含对象的数组是否存在重复元素。一种方法是使用Array.some结合自定义比较函数和Array.findIndex,另一种是利用Set数据结构去除重复项后比较长度。这两种方法都依赖于JSON.stringify将对象转为字符串进行比较,适合于对象属性简单的场景。



3万+

被折叠的 条评论
为什么被折叠?



