diff --git a/index.js b/index.js index d777274..86bc34f 100644 --- a/index.js +++ b/index.js @@ -11,7 +11,6 @@ function isMergeableObject(val) { var nonNullObject = val && typeof val === 'object' - return nonNullObject && Object.prototype.toString.call(val) !== '[object RegExp]' && Object.prototype.toString.call(val) !== '[object Date]' @@ -27,7 +26,7 @@ return function deepmerge(target, src) { src.forEach(function(e, i) { if (typeof dst[i] === 'undefined') { dst[i] = e; - } else if (typeof e === 'object' && e !== null) { + } else if (isMergeableObject(e)) { dst[i] = deepmerge(target[i], e); } else { if (target.indexOf(e) === -1) { diff --git a/test/merge.js b/test/merge.js index 7383632..ab5ee4b 100644 --- a/test/merge.js +++ b/test/merge.js @@ -262,3 +262,41 @@ test('should work on array with null in it', function(t) { t.deepEqual(merge(target, src), expected) t.end() }) + +test('null should be equal to null in an array', function(t) { + var target = [null, 'dude'] + var source = [null, 'lol'] + + var expected = [null, 'dude', 'lol'] + var actual = merge(target, source) + + t.deepEqual(actual, expected) + t.end() +}) + +test('dates in an array should be compared correctly', function(t) { + var monday = new Date('2016-09-27T01:08:12.761Z') + + var target = [monday, 'dude'] + var source = [monday, 'lol'] + + var expected = [monday, 'dude', 'lol'] + var actual = merge(target, source) + + t.deepEqual(actual, expected) + t.end() +}) + +test('dates should copy correctly in an array', function(t) { + var monday = new Date('2016-09-27T01:08:12.761Z') + var tuesday = new Date('2016-09-28T01:18:12.761Z') + + var target = [monday, 'dude'] + var source = [tuesday, 'lol'] + + var expected = [monday, 'dude', tuesday, 'lol'] + var actual = merge(target, source) + + t.deepEqual(actual, expected) + t.end() +})