判断两个对象是否相等的js函数
如果两个对象属性在初始化时出现的顺序不一样 但数目及值一样,最终比较结果也是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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论