JavaScript: выполнить глубокое сравнение между двумя значениями, чтобы определить, являются ли они эквивалентными
Основы JavaScript (синтаксис ES6): упражнение 47 с решением
Напишите программу на JavaScript для глубокого сравнения двух значений и определения их эквивалентности.
Примечание. Проверьте, являются ли эти два значения идентичными, являются ли они обоими объектами Date с одинаковым временем, используя Date.getTime () или они оба являются необъектными значениями с эквивалентным значением (строгое сравнение). Проверьте, является ли только одно значение нулевым или неопределенным или отличаются ли их прототипы. Если ни одно из указанных выше условий не выполнено, используйте Object.keys (), чтобы проверить, имеют ли оба значения одинаковое количество ключей, затем используйте Array.every (), чтобы проверить, существует ли каждый ключ в первом значении во втором, и если они эквивалентны, вызывая этот метод рекурсивно.
Пример решения:
HTML-код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Perform a deep comparison between two values to determine if they are equivalent</title>
</head>
<body>
</body>
</html>
Код JavaScript:
//#Source https://bit.ly/2neWfJ2
const equals = (a, b) => {
if (a === b) return true;
if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();
if (!a || !b || (typeof a !=='object' && typeof b !=='object')) return a === b;
if (a === null || a === undefined || b === null || b === undefined) return false;
if (a.prototype !== b.prototype) return false;
let keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
return keys.every(k => equals(a[k], b[k]));
};
console.log(equals({ a: [2, { e: 3 }], b: [4], c: 'foo' }, { a: [2, { e: 3 }], b: [4], c: 'foo' }));
Пример вывода:
правда
Иллюстрированная презентация:
Блок - схема:
Демонстрация в реальном времени:
См. Pen javascript-basic-упражнение-1-47 от w3resource ( @ w3resource ) на CodePen .
Улучшите этот пример решения и опубликуйте свой код через Disqus
Предыдущий: Написать программу JavaScript для карри (карри) функции
Далее: Напишите программу на JavaScript, чтобы получить массив имен свойств функций из собственных (и необязательно наследуемых) перечисляемых свойств объекта.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования