javascript比较对象数组
我得到了一个“超过了最大调用堆栈大小”。当我尝试迭代数组的内容时,我一辈子都不知道为什么 编辑:顺便说一下,我想补充一句,这是为Safari设计的 下面是函数:javascript比较对象数组,javascript,compare,Javascript,Compare,我得到了一个“超过了最大调用堆栈大小”。当我尝试迭代数组的内容时,我一辈子都不知道为什么 编辑:顺便说一下,我想补充一句,这是为Safari设计的 下面是函数: function compareObj(a,b) { var u = function(c,d) {//Check types var type = Object.prototype.toString.call(a) if (type !== Object.prototype.toString.call(b)) ret
function compareObj(a,b) {
var u = function(c,d) {//Check types
var type = Object.prototype.toString.call(a)
if (type !== Object.prototype.toString.call(b)) return false
return type.slice(8,-1) == 'Array' ? v(a,b) : type.slice(8,-1) == 'Object' ? w(a,b) :
type.slice(8,-1) == 'String' ? x(a,b) : type.slice(8,-1) == 'Number' ? y(a,b) :
type.slice(8,-1) == 'Boolean' ? z(a,b) : false ;
}
var v = function(c,d) {//Array
if (c.length !== d.length) return false
/*for (var i = 0; i < c.length; i++) {
if (!u(c[i],d[i])) {
return false
}
}*/
while (c.length) {
if (!u(c[0],d[0])) {
return false
} else {
c.shift();
d.shift();
}
}
return true
}
var w = function(c,d) {//Object
for (i in c) {
}
return true
}
var x = function(c,d) {//String
return c === d
}
var y = function(c,d) {//Number
return c === d
}
var z = function(c,d) {//Boolean
return c === d
}
return u(a,b)
}
函数比较bj(a,b){
var u=函数(c,d){//检查类型
var type=Object.prototype.toString.call(a)
if(type!==Object.prototype.toString.call(b))返回false
返回类型.slice(8,-1)==“Array”?v(a,b):类型.slice(8,-1)==“Object”?w(a,b):
类型.切片(8,-1)=“字符串”?x(a,b):类型.切片(8,-1)=“数字”?y(a,b):
类型切片(8,-1)=‘布尔’?z(a,b):假;
}
var v=函数(c,d){//数组
如果(c.length!==d.length)返回false
/*对于(变量i=0;i
我在u()函数的return语句中得到了重载您的函数可以短得多。建议使用有意义的完整函数名。有些功能是多余的。不需要递归。我冒昧地重写了你的函数,只是为了演示一下。你可以看到 实际上,如果您使用JSON(在较新的浏览器中是本机的,或者从库中),您只需使用:
function compare(a,b){
return JSON.stringify(a) === JSON.stringify(b);
}
不确定为什么会出现过载,但为什么会有3个相同的函数
x
,y
和z
?我只是在布置它,还没有完全清理它,因为我被这个愚蠢的堆栈大小错误卡住了一半,我看到compareObj([1,2,3],[1,2,3])=>在JSFIDLE中为false
。奇怪!事实上,所有的结果都是假的。这是正确的页面吗?@Jiri:您正在使用IE。IE从[someobj].constructor.name返回未定义的。我更新了小提琴来纠正这个错误。@Kooilnc:是的,现在可以了(+1)。我正在使用IE8。@Jiri:谢谢你提醒我总是在IE:P中检查我的代码
function compare(a,b){
return JSON.stringify(a) === JSON.stringify(b);
}