You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
895 B
44 lines
895 B
5 years ago
|
function deepEqual(val1, val2) {
|
||
|
if (typeof val1 !== typeof val2) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Array comparison.
|
||
|
if (Array.isArray(val1) && Array.isArray(val2)) {
|
||
|
if (val1.length !== val2.length) {
|
||
|
return false;
|
||
|
}
|
||
|
for (let i = 0; i < val1.length; i++) {
|
||
|
if (!deepEqual(val1[i], val2[i])) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Object comparison.
|
||
|
if (
|
||
|
typeof val1 === 'object' &&
|
||
|
typeof val2 === 'object' &&
|
||
|
val1 !== null &&
|
||
|
val2 !== null
|
||
|
) {
|
||
|
const keys1 = Object.keys(val1),
|
||
|
keys2 = Object.keys(val2);
|
||
|
if (keys1.length !== keys2.length) {
|
||
|
return false;
|
||
|
}
|
||
|
for (let i = 0; i < keys1.length; i++) {
|
||
|
if (!deepEqual(val1[keys1[i]], val2[keys2[i]])) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Primitive comparison.
|
||
|
return val1 === val2;
|
||
|
}
|
||
|
|
||
|
module.exports = deepEqual;
|