-2
我试图解决以下问题:雄辩的Javascript(4.4深层次比较)
写一个函数,deepEqual,取两个值,只返回,如果他们是相同的值,或者是具有相同属性的对象也是如此与递归调用deepEqual相比,其值也相等。
要了解是否通过身份(使用===运算符)或通过查看它们的属性来比较两件事,可以使用typeof运算符。如果它为两个值生成“对象”,则应该进行深入比较。但是你必须考虑一个愚蠢的例外:由于历史事故,typeof null也产生“对象”。
我的代码如下:
var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, {here: {is: "an"}, object: 55}));
function deepEqual(obj1, obj2){
if (obj1===obj2) {return true;}
else if(obj1===null || obj2=== null){return false;}
else{
if(typeof(obj1)==="object" || typeof(obj2)==="object"){
for (var key in obj1) {
//console.log(obj1[key]);
//console.log(obj2[key]);
//console.log("compares:"+obj1[key]+" with "+obj2[key]);
return JSON.stringify(obj1[key])===JSON.stringify(obj2[key]);
};
}
}
}
我应该得到假的(因为不同的值2和55),但我正在逐渐实现。任何想法为什么?谢谢。
您的比较只运行在第一次迭代为你'立即return'ing。 – Marty
什么是修复它的好方法? – user3477051
也许你可以在这里找到一些答案(https://github.com/substack/node-deep-equal)。 – Marty