Я не могу получить мой цикл for for, чтобы продолжить работу после первого свойства в моем объекте. Это вопрос из красноречивых JavaScript в главе 4:Для цикла в рекурсивной функции, не завершающейся
Написать функцию, deepEqual, которая принимает два значения и возвращает истину только если они имеют одинаковое значение или объекты с одинаковыми свойствами, значения которых также равным по сравнению с рекурсивным вызовом для deepEqual.
Чтобы узнать, нужно ли сравнивать две вещи по идентичности (используйте для этого оператор === ) или, посмотрев на их свойства, вы можете использовать оператор типа . Если он создает «объект» для обоих значений, вы должны выполнить глубокое сравнение. Но вы должны принять одно глупое исключение в учетную запись : по исторической аварии typeof null также производит «объект».
Вот мой код:
function deepEqual(obj1, obj2) {
if ((typeof obj1 === 'object' && obj1 != null) && (typeof obj2 === 'object' && obj2 != null)) {
for (var property in obj1) {
if (property in obj2) {
return deepEqual(obj1[property], obj2[property])
} else {
return false;
}
}
} else if (obj1 !== obj2) {
return false;
} else {
return true;
}
}
var obj = {object: 3, here: 1};
var obj2 = {object: 3, here: 2};
console.log(deepEqual(obj, obj2));
Консоль возвращает истину, когда он должен сказать ложь, потому что «здесь» свойства не равны. При просмотре вывода это происходит потому, что «for in loop» в функции завершается после первого свойства. Пожалуйста, помогите мне, почему это не продолжается.
Спасибо за комментарий! Ваш ответ имеет смысл, и я получил его для работы, заменив return: 'if (! DeepEqual (obj1 [property], obj2 [property])) return false;'. – runandrew