gpt4 book ai didi

javascript - 深度比较 JavaScript 函数

转载 作者:行者123 更新时间:2023-11-30 14:47:10 25 4
gpt4 key购买 nike

我正在阅读《Eloquent JavaScript》第三版,尽管我在 SO 上看到过一两个不同的答案,它们的执行逻辑似乎与我的几乎相同,但无论我如何调整,我的工作似乎都行不通。它。

目标:创建一个深度比较函数,可以比较两个对象,并根据它们的属性确定它们是否是同一类型对象的不同实例(相同的键和值),而不管引用如何...

有人能发现我代码中的错误吗?

function deepEqual(a,b){
if((typeof a=='object'&& a!=null)&&(typeof b=='object'&& b!=null)){
if(Object.keys(a).length != Object.keys(b).length){return false}
for(let key in a){
if(a[key]==b[key]){
if(!deepEqual(a[key],b[key])){return false}
}else{
return false
}
}
return true
}else if(a!==b){return false}

else{return true}
}

var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
// → true (reads true currently)
console.log(deepEqual(obj, {here: 1, object: 2}));
// → false (reads false currently)
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
// → true (reads false currently)

最佳答案

错误在这里:

if (a[key] == b[key])

如果它们是对象,即使它们“相等”,条件也可能返回 false。

function deepEqual(a, b) {
if (a && b && typeof a == 'object' && typeof b == 'object') {
if (Object.keys(a).length != Object.keys(b).length) return false;
for (var key in a) if (!deepEqual(a[key], b[key])) return false;
return true;
} else return a === b
}

var obj = {here: {is: "an"}, object: [2]};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: 1, object: 2}));
// → false
console.log(deepEqual(obj, {here: {is: "an"}, object: [2]}));
// → true

关于javascript - 深度比较 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728515/

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