Object.assign deeply const merge = require('assign-deeply'); merge( {a: 1, e: [2, 4]}, {a: 2, b: 2, c: [5,4], d: {x:1}, e: [5]}, {b: 1, c: [1], e: {1:3}, d: {y:7}} ) // { a: 2, e: [ 5, 3 ], b: 1, c: [ 1, 4 ], d: { x: 1, y: 7 } } Merges objects deeply, like Object.assign but deeper