Я пытаюсь решить следующий вопрос:Eloquent Javascript (4,4 Deep Сравнение)
Написать функцию, 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