gpt4 book ai didi

javascript比较对象数组

转载 作者:行者123 更新时间:2023-11-30 18:39:10 28 4
gpt4 key购买 nike

我收到“超出最大调用堆栈大小”的提示。在尝试迭代数组的内容时,我终生无法弄清楚为什么编辑:顺便说一句,我想补充一点,这是针对 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)) 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)
}

我在 u() 函数的返回语句中得到重载

最佳答案

您的函数可以短很多。建议使用有意义的函数名称。有些功能是多余的。不需要递归。我冒昧地重写了你的功能,只是为了演示。可以看看in action here .

function compareObj(a,b) {
var doCompare = function(c,d) {
//Check types (IE compatible)
var objRE = /Array|Object|String|Number|Boolean/,
aType = a.constructor.name || String(a.constructor).match(objRE)[0],
bType = b.constructor.name || String(b.constructor).match(objRE)[0];

//Types different? No dice.
if (aType !== bType) {return false;}

switch(aType){
case 'Array' : return arrayCompare(a,b); break;
case 'Object' : return objectCompare(a,b); break;
case 'String' : return valueCompare(a,b); break;
case 'Number' : return valueCompare(a,b); break;
case 'Boolean': return valueCompare(a,b); break;
default: return false
}
}

var arrayCompare = function(c,d) { //Array
if (c.length !== d.length) {return false;}
var i = c.length;
while (--i) {
if ( !valueCompare(c[i],d[i]) ) {
return false;
}
}
return true;
}

var objectCompare = function(c,d) { //Object
//you'll have to consider the number of elements too
var lenb = 0, lena = 0;
for (var label in d){
if (d.hasOwnProperty(label)) { lenb+=1; }
}
for (var label in c) {
if (c.hasOwnProperty(label)){
lena += 1;
if ( !valueCompare(c[label],d[label]) ) {
return false;
}
}
}
return lena === lenb;
}

var valueCompare = function(c,d) {//String
return JSON.stringify(c) === JSON.stringify(d);
}

return doCompare(a,b);
}

实际上,如果您使用 JSON(在较新的浏览器中是原生的,或者来自库),您只需使用:

function compare(a,b){
return JSON.stringify(a) === JSON.stringify(b);
}

关于javascript比较对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368666/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com