Skip to content

Commit

Permalink
*
Browse files Browse the repository at this point in the history
  • Loading branch information
imteekay committed Apr 16, 2024
1 parent 8c3b8ba commit 1b419f5
Showing 1 changed file with 70 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
function deepEquals(valueOne, valueTwo) {
const hasSameType = typeof valueOne === typeof valueTwo;
const areEqual = valueOne === valueTwo;
const areNaN = Number.isNaN(valueOne) && Number.isNaN(valueTwo);

if (hasSameType && (areEqual || areNaN)) {
return true;
}

if (
valueOne === null ||
valueTwo === null ||
valueOne === undefined ||
valueTwo === undefined ||
(hasSameType && !areEqual)
) {
return false;
}

if (Array.isArray(valueOne) && Array.isArray(valueTwo)) {
if (valueOne.length !== valueTwo.length) {
return false;
}

for (let index = 0; index < valueOne.length; index++) {
if (!deepEquals(valueOne[index], valueTwo[index])) {
return false;
}
}

return true;
}

for (let key of Object.keys(valueOne)) {
if (
!(
valueTwo.hasOwnProperty(key) && deepEquals(valueOne[key], valueTwo[key])
)
) {
return false;
}
}

for (let key of Object.keys(valueTwo)) {
if (
!(
valueOne.hasOwnProperty(key) && deepEquals(valueOne[key], valueTwo[key])
)
) {
return false;
}
}

return true;
}

console.log(deepEquals(null, [1])); // false
console.log(deepEquals([1], null)); // false
console.log(deepEquals(undefined, [1])); // false
console.log(deepEquals([1], undefined)); // false
console.log(deepEquals([0], [1])); // false
console.log(deepEquals([0, 1, 2], [4, 5, 6])); // false
console.log(deepEquals([0, 'abc', 2], [0, 'abc', '2'])); // false
console.log(deepEquals([0, 'abc', '2'], [0, 'abc', 2])); // false
console.log(deepEquals([null, null, true], [null, undefined, true])); // false
console.log(deepEquals([null, undefined, true], [null, null, true])); // false
console.log(deepEquals({}, {})); // true
console.log(deepEquals({ a: 123 }, { a: '123' })); // false
console.log(deepEquals({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2, 3: 3 })); // true
console.log(deepEquals({ 1: 1, 2: 2, 3: 3 }, { 2: 2, 1: 1, 3: 3 })); // true

0 comments on commit 1b419f5

Please sign in to comment.