javascriptangularangular6

Fastest way to compare 2 objects in js


Which is the fastest way to compare 2 objects in javascript?

For example I have these 2 objects:

a = [{'name': 'john', 'age': 22}, {'name': 'mike', 'age': 23}, {'name': 'anne', 'age': 12}, {'name': 'dan', 'age': 29}, {'name': 'jane', 'age': 34}]
b = [{'name': 'john', 'age': 22}, {'name': 'anne', 'age': 12}]

Normally, I would do this:

for (var i = 0; i < a.length; i++) {
    for (var j = 0; j < b.length; j++) {
        console.log(a[i]) // => [{'name': 'john', 'age': 22}, {'name': 'anne', 'age': 12}]
    }
}

This is taking too long, is it there another way faster? Thank you for your time!


Solution

  • You can have a look at the fast-deep-equal package. Here is a performance benchmark from their README.md for your reference.

    fast-deep-equal x 226,960 ops/sec ±1.55% (86 runs sampled)
    nano-equal x 218,210 ops/sec ±0.79% (89 runs sampled)
    shallow-equal-fuzzy x 206,762 ops/sec ±0.84% (88 runs sampled)
    underscore.isEqual x 128,668 ops/sec ±0.75% (91 runs sampled)
    lodash.isEqual x 44,895 ops/sec ±0.67% (85 runs sampled)
    deep-equal x 51,616 ops/sec ±0.96% (90 runs sampled)
    deep-eql x 28,218 ops/sec ±0.42% (85 runs sampled)
    assert.deepStrictEqual x 1,777 ops/sec ±1.05% (86 runs sampled)
    ramda.equals x 13,466 ops/sec ±0.82% (86 runs sampled)
    The fastest is fast-deep-equal