一、arr.some + JSON.stringify() 方法
var arr = [
{"id": 1, "name": "小小马"},
{"id": 2, "name": "小小牛"},
{"id": 3, "name": "小小羊"}
];
var targetObj = {"id": 1, "name": "小小马"};
var exists = arr.some(function(item) {
return JSON.stringify(item) === JSON.stringify(targetObj);
});
if (exists) {
console.log('对象存在于数组中');
} else {
console.log('对象不存在于数组中');
}
但是会有个小问题 如果目标对象的键值对顺序改变了会导致错误。如果确保目标对象的键值对顺 序确保不变的话可以使用
二、自定义比较函数
// 自定义对象比较函数
function isObjectEqual(obj1, obj2) {
// 首先,检查两个对象的键的数量是否相等,如果键的数量不同,直接返回 false
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
}
// 然后,通过 for...in 循环遍历 obj1 中的所有键,检查是否与 obj2 中对应键的值相等
for (let key in obj1) {
// 确保键是 obj1 自身的属性,而不是继承自原型链
if (obj1.hasOwnProperty(key)) {
// 检查 obj2 中是否存在相同的键,以及对应的值是否相等
if (!obj2.hasOwnProperty(key) || obj1[key] !== obj2[key]) {
// 如果 obj2 中没有相同的键,或者对应的值不相等,直接返回 false
return false;
}
}
}
// 如果通过上述检查,说明两个对象的所有键值对都相等,返回 true
return true;
}
var arr = [
{"id": 1, "name": "小小马"},
{"id": 2, "name": "小小牛"},
{"id": 3, "name": "小小羊"}
];
var targetObj = {"name": "小小牛", "id": 2};
var exists = arr.some(function(item) {
return isObjectEqual(item, targetObj);
});
if (exists) {
console.log('对象存在于数组中');
} else {
console.log('对象不存在于数组中');
}