判断两个对象是否相等的js函数

判断两个对象是否相等的js函数

作者:
袁晓平  来源:
博客园  发布时间:2009-12-08 12:51  阅读:654 次  
原文链接   
[收藏]  

如果两个对象属性在初始化时出现的顺序不一样 但数目及值一样,最终比较结果也是true

支持每个属性又是其他类型,如对象、数组、数字、字符串 

function equal(objA, objB)

{

    if (typeof arguments[0] != typeof arguments[1])

        return false;

    //数组

    if (arguments[0] instanceof Array)

    {

        if (arguments[0].length != arguments[1].length)

            return false;

        

        var allElementsEqual = true;

        for (var i = 0; i < arguments[0].length; ++i)

        {

            if (typeof arguments[0][i] != typeof arguments[1][i])

                return false;

            if (typeof arguments[0][i] == ‘number’ && typeof arguments[1][i] == ‘number’)

                allElementsEqual = (arguments[0][i] == arguments[1][i]);

            else

                allElementsEqual = arguments.callee(arguments[0][i], arguments[1][i]);            //递归判断对象是否相等                

        }

        return allElementsEqual;

    }

    

    //对象

    if (arguments[0] instanceof Object && arguments[1] instanceof Object)

    {

        var result = true;

        var attributeLengthA = 0, attributeLengthB = 0;

        for (var o in arguments[0])

        {

            //判断两个对象的同名属性是否相同(数字或字符串)

            if (typeof arguments[0][o] == ‘number’ || typeof arguments[0][o] == ‘string’)

                result = eval(“arguments[0][‘” + o + “‘] == arguments[1][‘” + o + “‘]”);

            else {

                //如果对象的属性也是对象,则递归判断两个对象的同名属性

                //if (!arguments.callee(arguments[0][o], arguments[1][o]))

                if (!arguments.callee(eval(“arguments[0][‘” + o + “‘]”), eval(“arguments[1][‘” + o + “‘]”)))

                {

                    result = false;

                    return result;

                }

            }

            ++attributeLengthA;

        }

        

        for (var o in arguments[1]) {

            ++attributeLengthB;

        }

        

        //如果两个对象的属性数目不等,则两个对象也不等

        if (attributeLengthA != attributeLengthB)

            result = false;

        return result;

    }

    return arguments[0] == arguments[1];

}

 

var a = {Name:”YuanXP”,Id:9,Go:{a:’1′,b:’2′}};
var b = {Id:9,Name:”YuanXP”,’Go’:{a:’1′,b:’2′}};

var r = equal(a, b);
alert(r); 

    原文作者:OmelasShell
    原文地址: https://blog.csdn.net/OmelasShell/article/details/7730937
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞