JSFiddle - React, Tailwind, and code Playground
JavaScript
/**
* Сравнение 2-х обектов с режимом строгости
* - objectA - Обьект|Массив в по которому необходимо сравнить
* - objectB - Обьект|Массив в с которым необходимо сравнить
* - [strict=false] - Режим строгости true:===,false:==;
* @param {object} objectA - Обьект | Массив в по которому необходимо сравнить
* @param {object} objectB - Обьект|Массив в с которым необходимо сравнить
* @param {boolean} [strict=false] - Режим строгости true:===,false:==;
* @returns {array}
*/
function getDifferenceBetweenObjects(objectA, objectB, strict = false) {
var propertyChanges = [];
var objectGraphPath = [];
function mode(a, b) {
if (strict ? a !== b : a != b) {
propertyChanges.push({
"Property": objectGraphPath.join(""),
"ObjectA": a,
"ObjectB": b
});
}
}
(function compare(a, b) {
if (a == void 0 || b == void 0 || typeof a != typeof b) {
mode(a, b)
} else if (a.constructor == Array && b.constructor == Array) {
let length = a.length || b.length;
for (var i = 0; i < length; i++) {
objectGraphPath.push("[" + i.toString() + "]");
compare(a[i], b[i]);
objectGraphPath.pop();
}
} else if (a.constructor == Object || (a.constructor != Number &&
a.constructor != String && a.constructor != Date &&
a.constructor != RegExp && a.constructor != Function &&
a.constructor != Boolean)) {
for (var property in a) {
let path = (objectGraphPath.length ? '.' : '') + property;
objectGraphPath.push((path));
if (a[property].constructor != Function) {
compare(a[property], b[property]);
}
objectGraphPath.pop();
}
} else if (a.constructor != Function) {
mode(a, b)
}
})(objectA,...