js 在两个数组中找相同的对象

在前端开发中,经常会遇到需要在两个数组中找出相同的对象的情况。这个问题看似简单,但实际上需要一定的技巧和方法来解决。本文将详细介绍如何使用 JavaScript 在两个数组中找出相同的对象。
问题描述
假设有两个数组 array1 和 array2,每个数组中包含多个对象。我们需要找出在这两个数组中共同存在的对象,并将其存放到一个新的数组中。
具体来说,对于每个对象,我们需要比较其所有属性值是否相同才能判断其相等。在 JavaScript 中,对象之间的比较是通过引用来判断的,也就是说只有当两个对象的引用相同时,它们才被认为相等。
解决方法
为了解决这个问题,可以使用以下几种方法:
方法一:遍历比较
最直接的方法是遍历两个数组,对每个对象进行比较。具体步骤如下:
- 创建一个空数组
result,用来存放共同的对象。 - 遍历
array1中的每个对象,在array2中查找是否存在相同的对象。 - 如果找到相同的对象,将其放入
result数组中。
function findCommonObjects(array1, array2) {
let result = [];
for (let obj1 of array1) {
for (let obj2 of array2) {
if (JSON.stringify(obj1) === JSON.stringify(obj2)) {
result.push(obj1);
break;
}
}
}
return result;
}
let array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let array2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
let commonObjects = findCommonObjects(array1, array2);
console.log(commonObjects);
在这段代码中,我们定义了一个 findCommonObjects 函数来实现找出相同对象的逻辑。然后我们创建了两个示例数组 array1 和 array2,并调用函数找出它们的相同对象。最终输出为:
[{id: 2, name: 'Bob'}]
方法二:使用 Set 数据结构
另一种更高效的方法是使用 Set 数据结构。首先将第一个数组中所有对象的 JSON 字符串形式放入一个 Set 中,然后遍历第二个数组,在 Set 中查找是否存在相同对象的 JSON 字符串。
function findCommonObjects(array1, array2) {
const set = new Set(array1.map(obj => JSON.stringify(obj)));
return array2.filter(obj => set.has(JSON.stringify(obj)));
}
let array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let array2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
let commonObjects = findCommonObjects(array1, array2);
console.log(commonObjects);
在这段代码中,我们创建了一个 Set 数据结构 set,并利用 map 方法将第一个数组中所有对象的 JSON 字符串形式放入 Set 中。然后使用 filter 方法遍历第二个数组,将存在于 Set 中的对象筛选出来。最终输出为:
[{id: 2, name: 'Bob'}]
总结
在前端开发中,需要在两个数组中找出相同的对象是一种常见的问题。本文分别介绍了遍历比较和使用 Set 数据结构两种方法来解决这个问题。根据具体情况选择不同的方法,可以提高代码的效率和可读性。
极客笔记