Lodash Playground
Play with lodash functions
HTML
<script src="https://cdn.jsdelivr.net/npm/lodash@3.10.1/index.min.js"></script>
Babel + JSX
var temp1 = [
{
key1: 'val1',
key2: [
{
subKey1: 'subVal1',
subKey2: ['34', '35']
},
{
subKey1: 'subVal2',
subKey2: ['24', '25']
}
]
},
{
key3: 'val2',
key4: [
{
subKey1: 'subVal3',
subKey2: ['14', '15']
},
{
subKey1: 'subVal4',
subKey2: ['44', '45']
}
]
}
]
var temp2 = [
{
key3: 'val2',
key4: [
{
subKey1: 'subVal4',
subKey2: ['45', '44']
},
{
subKey1: 'subVal3',
subKey2: ['14', '15']
}
]
},
{
key1: 'val1',
key2: [
{
subKey1: 'subVal2',
subKey2: ['24', '25']
},
{
subKey1: 'subVal1',
subKey2: ['34', '35']
}
]
}
]
function deepEqual(data1, data2) {
data1 = _.cloneDeep(data1);
data2 = _.cloneDeep(data2);
function isDeepEqual(val1, val2) {
if (_.isArray(val1) && _.isArray(val2)) {
if (val1.length === val2.length) {
for (let id1 in val1) {
let hasMatch = false;
let matchOnIndex = -1;
for (let id2 in val2) {
if (isDeepEqual(val1[id1], val2[id2])) {
hasMatch = true;
matchOnIndex = id2;
break;
}
}
if (hasMatch) {
val2.splice(matchOnIndex, 1);
} else {
return false;
}
}
return true;
} else {
return false;
}
}
if (_.isPlainObject(val1) && _.isPlainObject(val2)) {
if (Object.keys(val1).length === Object.keys(val2).length) {
for (let temp1 in val1) {
if (!isDeepEqual(val1[temp1], val2[temp1])) {
return false;
}
}
return true;
} else {
return false;
}
}
return _.isEqual(val1, val2);
}
return isDeepEqual(data1, data2);
}
console.log(_.isEqual(temp1,...