js 匹配两个对象数组中相同id相同属性的不同值 做记录
时间: 2024-04-29 07:26:55 浏览: 217
你可以使用循环遍历来比较两个对象数组中相同id相同属性的不同值。可以按照以下步骤进行操作:
1. 遍历第一个数组,对于每个对象,遍历第二个数组,查找具有相同id的对象。
2. 如果找到了相同id的对象,就比较它们的属性值是否不同。
3. 如果属性值不同,就将这些记录保存在一个记录数组中。
下面是一个简单的示例代码,假设你要比较的对象数组分别为`arr1`和`arr2`,它们都有一个`id`属性和一个`value`属性。
```javascript
let records = [];
for (let obj1 of arr1) {
for (let obj2 of arr2) {
if (obj1.id === obj2.id && obj1.value !== obj2.value) {
records.push({id: obj1.id, oldValue: obj1.value, newValue: obj2.value});
}
}
}
console.log(records);
```
这段代码会将所有有不同值的对象记录在`records`数组中,并将其打印出来。你可以根据自己的需求进行修改和扩展。
相关问题
js 匹配两个对象数组中相同id相同属性的不同值 做记录 属性不确定
可以使用 JavaScript 的双重循环来实现这个功能。首先,遍历第一个对象数组,然后再遍历第二个对象数组,判断两个对象的 id 是否相同,如果相同则遍历两个对象的所有属性,判断属性值是否相同,如果不同则记录下来。
以下是示例代码:
```javascript
let arr1 = [{id: 1, name: 'Alice', age: 20}, {id: 2, name: 'Bob', age: 25}];
let arr2 = [{id: 1, name: 'Alice', age: 22}, {id: 3, name: 'Charlie', age: 30}];
let records = [];
for (let obj1 of arr1) {
for (let obj2 of arr2) {
if (obj1.id === obj2.id) {
for (let key in obj1) {
if (obj1[key] !== obj2[key]) {
records.push({
id: obj1.id,
property: key,
value1: obj1[key],
value2: obj2[key]
});
}
}
}
}
}
console.log(records);
```
输出结果为:
```javascript
[
{ id: 1, property: 'age', value1: 20, value2: 22 }
]
```
这个示例代码可以在浏览器的控制台中运行,也可以在 Node.js 等 JavaScript 运行环境中运行。
js两个数组匹配相同的对象
方法一:使用循环嵌套
可以使用两个嵌套的循环来比较两个数组中的每个对象是否相同。
示例代码:
```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);
```
阅读全文