js比较两个对象是否全等相等

  • 转成字符串进行比较(这个方法只适用于完全相同的,即键-值顺序都完全对应的对象)

JSON.stringify(object1) === JSON.stringify(object2)
  • 键值一样,但顺序不一样的对象(以下是封装的方法,要是有什么不对的地方望指教,或给上一个对象我测测)

/* 
 * @fn 比较对象或者数组是否全等
 * @param object1 {Object OR Array} 对象1
 * @param object2 {Object OR Array} 对象2
 * @return {Boolean} true 为相等, false 为不等, 0 为传入参数不是对象也不是数组
*/
let ifCompare = function (object1, object2) {
    if (object1 && object2) {
        if (Array.isArray(object1) && Array.isArray(object2)) {
            if (!forArr(object1, object2)) return false;
        }
        if (typeof object1 == 'object' && typeof object2 == 'object') {
            let o1keys = Object.keys(object1); // 把对象所有键遍历转成数组['k1','k2']
            let o2keys = Object.keys(object2);
            if (o2keys.length !== o1keys.length) return false;
            for (let i = 0; i <= o1keys.length - 1; i++) {
                let key = o1keys[i];
                if (!o2keys.includes(key)) return false; // 查找字符串或数组是否包含 "key"
                if (object2[key] && object1[key]) {
                    if (Array.isArray(object2[key]) && Array.isArray(object1[key])) {
                        if (!forArr(object2[key], object1[key])) return false;
                    } else if (typeof object2[key] == 'object' && typeof object1[key] == 'object') {
                        if (!ifCompare(object1[key], object2[key])) return false;
                    } else if (object2[key] !== object1[key]) return false;
                } else {
                    if (object2[key] !== object1[key]) return false;
                }
            }
            return true;
        }
    }
    function forArr(arr1, arr2) {
        if (arr1.length !== arr2.length) return false;
        for (let i = 0; i < arr1.length; i++) {
            if (arr1[i] && arr2[i]) {
                if (Array.isArray(arr1[i]) && Array.isArray(arr2[i])) forArr(arr1[i], arr2[i]);
                else if (typeof arr1[i] == 'object' && typeof arr2[i] == 'object') {
                    if (!ifCompare(arr1[i], arr2[i])) return false;
                } else if (arr1[i] !== arr2[i]) return false;
            } else {
                if (arr1[i] !== arr2[i]) return false; 
            }
        }
        return true;
    }
    return 0;
};
  • ES6方法:Object.entries(obj)

Object.entries(object1).toString() === Object.entries(object2).toString();

 

posted @ 2021-09-23 14:51  有梦想的小猪  阅读(727)  评论(0)    收藏  举报