Для обработки нечувствительных к регистру сравнений между строковыми значениями (это не будет работать для ключей), вы можете использовать lodash _.isEqualWith()
с функцией настройщика:
const obj1 = {"type":"NEW","users":[{"id":"dskd3782shdsui","email":"helloworld@xxxxxx.COM"}],"ordered":[{"productId":"SHFDHS37463","SKU":"ffgh"}]}
const obj2 = {"type":"new","users":[{"id":"dskd3782shdsui","email":"helloworld@xxxxxx.com"}],"ordered":[{"productId":"SHFDHS37463","SKU":"ffgh"}]}
const result = _.isEqualWith(
obj1,
obj2,
(objValue, othValue) => _.isString(objValue) && _.isString(othValue) ?
objValue.toLowerCase() === othValue.toLowerCase()
:
undefined
)
console.log('==', result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
Чтобы обработать ключи с разными регистрами, необходимо нормализовать ключи до строчных, а затем выполнить сравнение.Я использую _.transform()
для создания рекурсивной функции, которая повторяет вложенный объект и преобразует все ключи в нижний регистр.
const normaliseKeys = obj => _.transform((r, k, v) => {
const key = _.isString(k) ? k.toLowerCase() : k;
r[key] = _.isObject(v) ? normaliseKeys(v) : v;
})
const obj1 = normaliseKeys({"TYPE":"NEW","users":[{"id":"dskd3782shdsui","EMAIL":"helloworld@xxxxxx.COM"}],"ordered":[{"productId":"SHFDHS37463","SKU":"ffgh"}]})
const obj2 = normaliseKeys({"type":"new","users":[{"id":"dskd3782shdsui","email":"helloworld@xxxxxx.com"}],"ordered":[{"productId":"SHFDHS37463","SKU":"ffgh"}]})
const result = _.isEqualWith(
obj1,
obj2,
(objValue, othValue) => _.isString(objValue) && _.isString(othValue) ?
objValue.toLowerCase() === othValue.toLowerCase()
:
undefined
)
console.log('==', result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>