对比两个对象,筛选出不同的字段
时间: 2024-04-30 14:23:47 浏览: 17
我们可以使用循环遍历对象的方法来实现对比两个对象并筛选出不同的字段。具体步骤如下:
1. 首先,我们需要先定义一个函数,该函数接收两个参数,即需要对比的两个对象。
2. 接着,我们需要先定义一个空数组,用于存储不同的字段。
3. 然后,我们使用循环遍历其中一个对象的所有字段,对比另一个对象是否存在该字段,并判断其值是否相等。
4. 如果存在不同的字段或者值不相等,我们将该字段名添加到空数组中。
5. 最后,返回存储不同字段名的数组。
下面是一个示例代码:
```javascript
function compareObjects(obj1, obj2) {
const diffFields = [];
for (let prop in obj1) {
if (obj1.hasOwnProperty(prop)) {
if (!obj2.hasOwnProperty(prop) || obj1[prop] !== obj2[prop]) {
diffFields.push(prop);
}
}
}
for (let prop in obj2) {
if (obj2.hasOwnProperty(prop)) {
if (!obj1.hasOwnProperty(prop)) {
diffFields.push(prop);
}
}
}
return diffFields;
}
// 示例
const obj1 = { name: 'Tom', age: 18, gender: 'male' };
const obj2 = { name: 'Tom', age: 20, hobby: 'reading' };
console.log(compareObjects(obj1, obj2)); // ["age", "gender", "hobby"]
```
以上代码中,我们先定义了一个名为 `compareObjects` 的函数,它接收两个参数 `obj1` 和 `obj2`,用于对比两个对象。
在函数中,我们定义了一个空数组 `diffFields`,用于存储不同的字段名。
接着,我们使用循环遍历 `obj1` 对象的所有字段,对比 `obj2` 是否存在该字段,并判断其值是否相等。如果存在不同的字段或值不相等,我们将该字段名添加到 `diffFields` 数组中。
接着,我们再使用循环遍历 `obj2` 对象的所有字段,判断是否存在于 `obj1` 对象中。如果不存在,则将该字段名添加到 `diffFields` 数组中。
最后,我们将存储不同字段名的数组返回。在示例中,我们对比了 `obj1` 和 `obj2` 两个对象,发现它们在 `age`、`gender` 和 `hobby` 这三个字段上存在不同,因此返回了 `["age", "gender", "hobby"]` 数组。