Поэтому я создал базовый алгоритм в javascript для сравнения объектов любой возможной глубины, хотя вы можете использовать метод JSON.stringyfy(), но это дорого и неэффективно.
Этот алгоритм сообщает, какие ключи отсутствуют, если для ключей существует несоответствие типов, он также возвращает путь трассировки несоответствия типа.
Пожалуйста, просмотрите приведенный ниже код.
Таким образом, он дает вывод, например:
[ { source_trace: [ 'nested', 0 ], source: [ 4.5 ], target: 4.5, index: 'a' }, { source_trace: [ 'nested', 0, 'v', 0 ], source: 23, target: 'a', index: 'age' } ]
По сути, мы сравниваем два объекта a_obj и b_obj и даем в качестве входных данных эти функции, и функция возвращает этот выходной массив из 2 объектов, что означает наличие 2 проблем или несоответствие.
source_trace :этодает трассировку произошедшей проблемы, поэтому в «вложенном» ключе следующий массив, поэтому в позиции 0 этого массива. (В случае объекта он сообщит ключ в случае массива он сообщит индекс)
source: показывает, какие существуют значения источника.
target: показывает, какие существуют значения target.
индекс: он сообщает после source_trace точное местонахождение проблемы.
Итак, в нашем коде есть два несоответствия, поэтому он выдает два объекта.
Я создал этот алгоритм для проверки типов в предоставленной полной схеме. Вы можете использовать этот код, модифицируя его для сравнения различных объектов, например, для поиска каких-либо нулевых, неопределенных значений, или вы хотите также проверить значения типа плюс.
Используется DFS (подход поиска в глубину) для поиска элементов, исследующих сначала глубину, а затем дочерние элементы. Здесь в javascript есть два потока для поиска объекта и массива, которые вы можете изменить для своего языка.
Используется стек для поддержания пути трассировки и возврата пути трассировки проблем.
ВЫПОЛНЕНО