在 Javascript 中如果你需要判断对象是否相等,那个这篇文章将能够帮助你。本文将介绍在 js 中如何判断对象是否相等。

本文将提供如下几种方法判断对象是否相等:

  • js 基于 Lodash 打包的 isEqual() 函数判断对象是否相等
  • js 利用 Object.keys() 自定义函数判断两个对象是否相等
  • js 利用 JSON.stringify() 函数判断对象是否相等

注:在网上还有很多其他的方法判断 js 中的对象是否相等,但是都不实用,在实际的应用中用不到。

推荐:基于 Lodash 打包的 isEqual() 函数判断对象是否相等

isEqual() 函数是作者基于 Lodash 中的 isEqual() 函数,自己打包的 UMD 格式的文件,文件只包含了这一个函数,具体实用方式请查看 Lodash 文档。

文件使用方法:直接在浏览器,ES 模块使用 使用 isEqual() 函数即可。

isEqual() 函数不只是能够判断对象是否相同,还能够判断数字、字符串、数组是否相等。

在 JavaScript 中利用 isEqual() 函数判断对象是否相等的示例:

const wang = {
    'name': 'Wang',
    'email': 'wang@51shizhi.com'
};
const li = {
    'name': 'Li',
    'email': 'li@51shizhi.com'
};

console.log(isEqual(wang, {
    'name': 'Wang',
    'email': 'wang@51shizhi.com'
}));
// 输出为: true

console.log(isEqual(wang, li));
// 输出为: false

推荐:利用 Object.keys() 自定义函数判断两个对象是否相等

如果你不想导入第三方库文件,推荐你使用该种方式判断两个对象是否相等。

利用 Object.keys() 自定义一个函数,判断两个对象的属性是否相等、属性值是否相等,如果属性和属性值都相等则判定两个对象相等。

如下给出利用 Object.keys() 判断对象相等的函数定义:

const wang = {
    'name': 'Wang',
    'email': 'wang@51shizhi.com'
};
const li = {
    'name': 'Li',
    'email': 'li@51shizhi.com'
};

function isObjectEqual(obj, other) {
    let obj_keys = Object.keys(obj);
    let other_keys = Object.keys(other);
    if (obj_keys.length != other_keys.length) {
        return false;
    }
    // 排序 keys,因为需要比较 key 是否相等
    obj_keys.sort();
    other_keys.sort();
    // 使用 obj_keys.length 或 other_keys.length 都可以,因为值相同
    for (let i=0; i<obj_keys.length; i++) {
        if (obj_keys[i] != other_keys[i] || obj[obj_keys[i]] != other[other_keys[i]]) {
            return false;
        }
    }
    return true;
}

console.log(isObjectEqual(wang, {
    'email': 'wang@51shizhi.com',
    'name': 'Wang'
}))
// 输出为:true

console.log(isObjectEqual(wang, li))
// 输出为:false

注:此种判断方法要比使用 JSON.stringify() 判断更好,更不容易出现判断错误。

基于 JSON.stringify() 自定义函数判断对象是否相等

JSON.stringify() 函数是把 JS 对象的属性和值进行序列化,转变为字符串,因此在字符串中包含了 js 对象的所有自由属性和值,因此可以使用 JSON.stringify() 函数在 JavaScript 中判断对象是否相等。

1、基于 JSON.stringify() 自定义 isEqual() 函数:

// 使用箭头函数定义一个判断两个对象的属性和值是否相同的函数
const isEqual = (value, other) => {
    return JSON.stringify(value) === JSON.stringify(other);
}

// 或者

// 使用正常函数定义一个判断两个对象的属性和值是否相同的函数
function isEqual(value, other) {
    return JSON.stringify(value) === JSON.stringify(other);
}

2、在 js 中实用自定义 isEqual() 函数判断对象是否相等示例:

const wang = {
    'name': 'Wang',
    'email': 'wang@51shizhi.com'
};
const li = {
    'name': 'Li',
    'email': 'li@51shizhi.com'
};

console.log(isEqual(wang, {
    'name': 'Wang',
    'email': 'wang@51shizhi.com'
}));
// 输出为: true

console.log(isEqual(wang, li));
// 输出为: false

注:当两个对象的包含的属性相同,只是顺序不同时,也会判断为两个对象不同,因此使用要谨慎

结语

本文中介绍了三种方法在 js 中判断对象是否相等,分别是:js 基于 Lodash 打包的 isEqual() 函数判断对象是否相等, js 利用 Object.keys() 自定义函数判断两个对象是否相等,js 利用 JSON.stringify() 函数判断对象是否相等。在网上还有很多其他的方法判断 js 中的对象是否相等,但是都不实用,在实际的应用中用不到。