js两个数组匹配相同的对象
时间: 2023-10-10 14:10:27 浏览: 45
方法一:使用循环嵌套
可以使用两个嵌套的循环来比较两个数组中的每个对象是否相同。
示例代码:
```javascript
const arr1 = [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Mike'}];
const arr2 = [{id: 2, name: 'Jane'}, {id: 1, name: 'John'}, {id: 3, name: 'Mike'}];
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if (arr1[i].id === arr2[j].id && arr1[i].name === arr2[j].name) {
console.log(`Match found at ${i} in array 1 and ${j} in array 2.`);
break;
}
}
}
```
方法二:使用Array.prototype.filter()和Array.prototype.some()
可以使用Array.prototype.filter()方法过滤出两个数组中相同的对象,然后使用Array.prototype.some()方法判断是否存在相同的对象。
示例代码:
```javascript
const arr1 = [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Mike'}];
const arr2 = [{id: 2, name: 'Jane'}, {id: 1, name: 'John'}, {id: 3, name: 'Mike'}];
const matched = arr1.filter(obj1 => arr2.some(obj2 => obj1.id === obj2.id && obj1.name === obj2.name));
console.log(matched);
```
方法三:使用Array.prototype.reduce()
可以使用Array.prototype.reduce()方法将一个数组转化为一个对象,然后使用Object.keys()和Array.prototype.filter()方法比较两个对象的属性值是否相同。
示例代码:
```javascript
const arr1 = [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Mike'}];
const arr2 = [{id: 2, name: 'Jane'}, {id: 1, name: 'John'}, {id: 3, name: 'Mike'}];
const obj1 = arr1.reduce((acc, obj) => {
acc[obj.id] = obj.name;
return acc;
}, {});
const obj2 = arr2.reduce((acc, obj) => {
acc[obj.id] = obj.name;
return acc;
}, {});
const matched = Object.keys(obj1).filter(key => obj1[key] === obj2[key]).map(key => ({id: Number(key), name: obj1[key]}));
console.log(matched);
```