Skip to content

Commit db154e0

Browse files
authored
Merge pull request #5 from Geta/develop
Fix issue with concatting arrays inside objects.
2 parents d0b20a8 + 3e144cf commit db154e0

File tree

5 files changed

+116
-14
lines changed

5 files changed

+116
-14
lines changed

lib/nestedObjectAssign.js

Lines changed: 63 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"name": "nested-object-assign",
3-
"version": "1.0.1",
3+
"version": "1.0.2",
44
"description": "Package to support nested merging of objects & properties, using Object.Assign",
55
"main": "./index.js",
66
"scripts": {
7+
"start": "npm run-script build-dev",
78
"prepublish": "npm run build-all",
89
"preversion": "npm run build-all && npm run unit",
910
"version": "git add .",

src/isArray.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function isArray(item){
2+
return (item && Array.isArray(item));
3+
}

src/nestedObjectAssign.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import {isObject} from './isObject';
1+
import { isObject } from './isObject';
2+
import { isArray } from './isArray';
23

34
export default function nestedObjectAssign(target, ...sources){
45
if (!sources.length)
@@ -9,12 +10,18 @@ export default function nestedObjectAssign(target, ...sources){
910
if (isObject(target) && isObject(source)){
1011
for (const key in source){
1112
if (isObject(source[key])){
12-
if (!target[key])
13+
if (!target[key]) {
1314
Object.assign(target, {[key]: {}});
15+
}
1416

1517
nestedObjectAssign(target[key], source[key]);
16-
}
17-
else {
18+
} else if (isArray(source[key])) {
19+
if (!target[key]) {
20+
Object.assign(target, {[key]: []});
21+
}
22+
23+
target[key] = target[key].concat(source[key]);
24+
} else {
1825
Object.assign(target, {[key]: source[key]});
1926
}
2027
}

test/nestedObjectAssign.spec.js

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,70 @@
11
import { expect } from 'chai';
22
import nestedObjectAssign from '../index.js';
33

4-
var mockData = {
4+
const mockData = {
55
default: {
66
heading: 'title',
77
body: {
88
paragraph: 'p',
99
heading: 'h1'
10-
}
10+
},
11+
products: [
12+
{
13+
paragraph: 'p',
14+
heading: 'h1'
15+
}
16+
]
1117
},
1218
first: {
1319
body: {
1420
span: 'span',
1521
header: 'header'
16-
}
22+
},
23+
products: [
24+
{
25+
span: 'span',
26+
header: 'header'
27+
}
28+
]
1729
},
1830
second: {
1931
body: {
2032
heading2: 'h2'
21-
}
33+
},
34+
products: [
35+
{
36+
heading2: 'h2'
37+
}
38+
]
2239
}
23-
2440
};
2541

26-
var expectedData = {
42+
const expectedData = {
2743
heading: 'title',
2844
body: {
2945
paragraph: 'p',
3046
heading: 'h1',
3147
span: 'span',
3248
header: 'header',
3349
heading2: 'h2'
34-
}
50+
},
51+
products: [
52+
{
53+
paragraph: 'p',
54+
heading: 'h1'
55+
},
56+
{
57+
span: 'span',
58+
header: 'header'
59+
},
60+
{
61+
heading2: 'h2'
62+
}
63+
]
3564
};
3665

3766
describe('Given an instance of nestedObjectAssign', function() {
38-
describe('when i merge the mockData', function() {
67+
describe('when I merge the mockData', function() {
3968
it('it should be equal to expectedData', () => {
4069
expect(JSON.stringify(nestedObjectAssign({}, mockData.default, mockData.first, mockData.second))).to.be.equal(JSON.stringify(expectedData));
4170
});

0 commit comments

Comments
 (0)