美文网首页
两个js对象深度比较

两个js对象深度比较

作者: 十国 | 来源:发表于2021-02-10 12:29 被阅读0次

两个JS Object对象深度比较

开发中我们经常需要对两个对象值进行比较,百度一番问题多多,于是自己写了一个仅供参考。

const deepEqual = function (x, y) {
    let prototype_x = Object.prototype.toString.call(x)
    let prototype_y = Object.prototype.toString.call(y)

    if(prototype_x == '[object Undefined]'){
        prototype_x = '[object Null]'
    }
    if(prototype_y == '[object Undefined]'){
        prototype_y = '[object Null]'
    }

    if (prototype_x != prototype_y) {
        return false
    }

    /**以下类型相同比较 */
    if (prototype_x == '[object Object]') {
        if (Object.keys(x).length != Object.keys(y).length) {
            return false;
        }

        for (var key in x) {
            if (!deepEqual(x[key], y[key])) {
                return false
            }
        }
    } else if (prototype_x == '[object Array]') {
        if (x.length != y.length) {
            return false
        }
        for (let index = 0; index < x.length; index++) {
            if (!deepEqual(x[index], y[index])) {
                return false
            }
            
        }
    }
 /**过滤对函数的深比较 */
    else if(prototype_x == '[object Function]'){
        return true
    } else {
        /**其它类型值比较 */
        return x == y
    }
    
    return true
}
定义一个深拷贝函数 接收目标target参数
function deepClone(target) {
    // 定义一个变量
    let result;
    // 如果当前需要深拷贝的是一个对象的话
    if (typeof target === 'object') {
    // 如果是一个数组的话
        if (Array.isArray(target)) {
            result = []; // 将result赋值为一个数组,并且执行遍历
            for (let i in target) {
                // 递归克隆数组中的每一项
                result.push(deepClone(target[i]))
            }
         // 判断如果当前的值是null的话;直接赋值为null
        } else if(target===null) {
            result = null;
         // 判断如果当前的值是一个RegExp对象的话,直接赋值    
        } else if(target.constructor===RegExp){
            result = target;
        }else {
         // 否则是普通对象,直接for in循环,递归赋值对象的所有值
            result = {};
            for (let i in target) {
                result[i] = deepClone(target[i]);
            }
        }
     // 如果不是对象的话,就是基本数据类型,那么直接赋值
    } else {
        result = target;
    }
     // 返回最终结果
    return result;
}

相关文章

  • 两个js对象深度比较

    两个JS Object对象深度比较 开发中我们经常需要对两个对象值进行比较,百度一番问题多多,于是自己写了一个仅供...

  • js对象数组深度去重和深度排序

    js对象数组深度去重和深度排序 要点:使用collect.js处理数组和对象 https://github.com...

  • 深度比较两个javaScript对象

  • js对象比较

    在js 判断相等常见的就是 == (等同)和===(恒等);==, 两边值类型不同的时候,要先进行类型转换,再比较...

  • js对象深度克隆

    通用克隆方法 第一种方法简单粗暴,先将对象序列化再解析回来,不过要注意对象中如果有函数function则不能正确复...

  • js对象深度拷贝

    js对象为什么要深度拷贝,不深度拷贝有什么影响? 举个例子 将对象通过 “ = ”复制给另一个对象时,只是相对于给...

  • js 对象深度复制

    js 对象复制是地址传递, 而不是值传递, 可以使用如下方法进行``深度复制`

  • js ,对象深度复制

    1、基于ES5语法 var deepClone=function(obj){ varcopy; //处理3种基础类...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • javascript 深度比较两个对象是否相等

    代码 使用

网友评论

      本文标题:两个js对象深度比较

      本文链接:https://www.haomeiwen.com/subject/kmtkxltx.html