diff --git a/index.js b/index.js index bb0a704..354cbc3 100644 --- a/index.js +++ b/index.js @@ -53,8 +53,7 @@ function deepmerge(target, source, optionsArgument) { var arrayMerge = options.arrayMerge || defaultArrayMerge if (array) { - target = target || []; - return arrayMerge(target, source, optionsArgument) + return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : source.slice() } else { return mergeObject(target, source, optionsArgument) } diff --git a/test/merge.js b/test/merge.js index b651d6c..2c9a03d 100644 --- a/test/merge.js +++ b/test/merge.js @@ -129,6 +129,57 @@ test('should replace object with simple key in target', function (t) { t.end() }) +test('should replace objects with arrays', function(t) { + var target = [ + { key1: { subkey: 'one' }} + ] + + var src = [ + { key1: [ "subkey" ]} + ] + + var expected = [ + { key1: [ "subkey" ]} + ] + + t.deepEqual(merge(target, src), expected) + t.end() +}) + +test('should replace dates with arrays', function(t) { + var target = [ + { key1: new Date()} + ] + + var src = [ + { key1: [ "subkey" ]} + ] + + var expected = [ + { key1: [ "subkey" ]} + ] + + t.deepEqual(merge(target, src), expected) + t.end() +}) + +test('should replace null with arrays', function(t) { + var target = { + key1: null + } + + var src = { + key1: [ "subkey" ] + } + + var expected = { + key1: [ "subkey" ] + } + + t.deepEqual(merge(target, src), expected) + t.end() +}) + test('should work on simple array', function (t) { var src = ['one', 'three'] var target = ['one', 'two']