雄辩的JavaScript 4.4深度比较
我正试着教自己一些JavaScript 我正在练习4.4深度比较。 我已经编写了自己的代码,通过了所有的测试,甚至我自己做的一些测试,但是当我检查解决方案时,它与我所做的完全不同 有没有人能告诉我,我的代码是否产生了与解决方案相同的结果,或者有没有人能告诉我,即使我的代码与解决方案完全不同,如何判断我的代码是否正确,不仅是针对这个实践问题,而且是针对未来的问题 我只是害怕有一个错误的想法,并没有意识到,因为我的代码工作 问题是: 编写一个函数deepEqual,该函数接受两个值,并且仅当它们是相同的值或具有相同属性的对象,并且与对deepEqual的递归调用相比,它们的值也相等时才返回true 要确定是通过标识(使用===运算符)还是通过查看它们的属性来比较两个对象,可以使用typeof运算符。如果它为这两个值生成“object”,则应该进行深入比较。但你必须考虑一个愚蠢的例外:历史上的一次偶然,typeof null也会产生“object” 我的代码是:雄辩的JavaScript 4.4深度比较,javascript,object,Javascript,Object,我正试着教自己一些JavaScript 我正在练习4.4深度比较。 我已经编写了自己的代码,通过了所有的测试,甚至我自己做的一些测试,但是当我检查解决方案时,它与我所做的完全不同 有没有人能告诉我,我的代码是否产生了与解决方案相同的结果,或者有没有人能告诉我,即使我的代码与解决方案完全不同,如何判断我的代码是否正确,不仅是针对这个实践问题,而且是针对未来的问题 我只是害怕有一个错误的想法,并没有意识到,因为我的代码工作 问题是: 编写一个函数deepEqual,该函数接受两个值,并且仅当它们是相
function deepEqual(val1, val2) {
if(typeof val1 !== typeof val2) return false;
else if(typeof val1 !== "object") return val1 === val2;
for(var event in val1){
return deepEqual(val1[event], val2[event]);
}
}
解决办法是:
function deepEqual2(a, b) {
if (a === b) return true;
if (a == null || typeof a != "object" ||
b == null || typeof b != "object")
return false;
var propsInA = 0, propsInB = 0;
for (var prop in a)
propsInA += 1;
for (var prop in b) {
propsInB += 1;
if (!(prop in a) || !deepEqual(a[prop], b[prop]))
return false;
}
return propsInA == propsInB;
}
提前谢谢 您的代码有几个问题:
for in
循环中有一个return
。因此,在比较对象时,代码所做的只是检查第一个属性a
中的属性;如果b
有一个a
没有的属性怎么办谢谢!检查我的代码以尽可能多地找出可能的情况的唯一方法是什么??我不想每次试图解决一些实践问题时都问我是否有正确的代码…@user2099177:这两者的结合,从逻辑上思考你的代码在做什么,并在调试器中逐步检查代码以确保它在做你认为它在做的事情。:-)