Особенность compareItem, в том, что оно затрагивает все изменения объекта. Если мы передадим следующий объект в функцию:
{ "username.name.login": "Jenesius" }
На выходе мы получим три объекта изменения: username, username.name и username.name.login.
Важно! Это поведение является полностью верным и не требует изменений или оптимизации.
Предложение 1
В данной реализации мы идём по всем трём объектам и добавляем их. Но в этом нет смысла: нам не надо добавлять родительские, если мы в будущем будет добавлять дочерние.
В таком ключе, можно предложить следующее: добавлять только дочерние(листья) CompareItem[].
Предложение 2
Добавить в CompareResult новое поле: isEndPoint(Boolean), который будет отвечать за то, что данный CompareItem в дальнейшей цепочке compare не будет затрагиваться.
Особенность compareItem, в том, что оно затрагивает все изменения объекта. Если мы передадим следующий объект в функцию:
На выходе мы получим три объекта изменения:
username
,username.name
иusername.name.login
. Важно! Это поведение является полностью верным и не требует изменений или оптимизации.Предложение 1
В данной реализации мы идём по всем трём объектам и добавляем их. Но в этом нет смысла: нам не надо добавлять родительские, если мы в будущем будет добавлять дочерние.
В таком ключе, можно предложить следующее: добавлять только дочерние(листья) CompareItem[].
Предложение 2
Добавить в CompareResult новое поле:
isEndPoint(Boolean)
, который будет отвечать за то, что данный CompareItem в дальнейшей цепочке compare не будет затрагиваться.