Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #114 Test deep equality

Set boolean b to true if objects x and y contain the same values, recursively comparing all referenced elements in x and y.
Tell if the code correctly handles recursive types.

let b = x == y;
(def b (identical? x y))
(def b (= x y))
b = deeplyEqual(x, y));
b = x == y
import "reflect"
b := reflect.DeepEqual(x, y)
b = x == y
const b = JSON.stringify(x) === JSON.stringify(y);
const arrayDeepEqual = (a, b) => a.length === b.length && a.every((x, i) => deepEqual(x, b[i]))

const deepEqual = (a, b) =>
  Array.isArray(a) && Array.isArray(b)
    ? arrayDeepEqual(a, b)
    : typeof a == 'object' && a && typeof b == 'object' && b
    ? arrayDeepEqual(Object.entries(a), Object.entries(b))
    : Number.isNaN(a) && Number.isNaN(b) || a === b

const b = deepEqual(x, y)
import {isDeepStrictEqual} from 'util'
const b = isDeepStrictEqual(x, y)
import _ from 'underscore';
const b = _.isEqual(x, y);
$b = ($x == $y);
use Data::Compare;
my $b = Compare($x, $y);
b = x == y
b = x == y
case class A(a: Int, b: Float, c: String)
val x = A(1,2.2f,"hello")
val y = A(1,2.2f,"hello")

b = x == y 
(define b (equal? x y))

New implementation...
< >
programming-idioms.org