1
1
'use strict' ;
2
2
var isArray = require ( 'isarray' ) ;
3
- var extend = require ( 'shallow-object- extend' ) ;
4
- var exists = require ( 'property-exists' ) ;
3
+ var extend = require ( 'extend' ) ;
4
+ var exists = require ( 'property-exists' ) ;
5
5
6
6
var createTree = function ( array , rootNodes , customID ) {
7
7
var tree = [ ] ;
8
8
9
9
for ( var rootNode in rootNodes ) {
10
- if ( ! exists ( rootNodes , rootNode ) ) {
11
- continue ;
12
- }
13
10
var node = rootNodes [ rootNode ] ;
14
11
var childNode = array [ node [ customID ] ] ;
15
12
13
+ if ( ! node && ! exists ( rootNodes , rootNode ) ) {
14
+ continue ;
15
+ }
16
+
16
17
if ( childNode ) {
17
18
node . children = createTree ( array , childNode , customID ) ;
18
19
}
@@ -25,15 +26,16 @@ var createTree = function(array, rootNodes, customID) {
25
26
26
27
var groupByParents = function ( array , options ) {
27
28
var parents = { } ;
28
- var parentProperty = options . parentProperty ;
29
29
30
30
array . forEach ( function ( item ) {
31
- var parentID = item [ parentProperty ] || options . rootID ;
32
- if ( exists ( parents , parentID ) ) {
31
+ var parentID = item [ options . parentProperty ] || options . rootID ;
32
+
33
+ if ( parentID && exists ( parents , parentID ) ) {
33
34
parents [ parentID ] . push ( item ) ;
34
- } else {
35
- parents [ parentID ] = [ item ] ;
35
+ return ;
36
36
}
37
+
38
+ parents [ parentID ] = [ item ] ;
37
39
} ) ;
38
40
39
41
return parents ;
@@ -63,10 +65,10 @@ module.exports = function arrayToTree(data, options) {
63
65
parentProperty : 'parent_id' ,
64
66
customID : 'id' ,
65
67
rootID : '0'
66
- } , options || { } ) ;
68
+ } , options ) ;
67
69
68
70
if ( ! isArray ( data ) ) {
69
- throw new Error ( 'Expected an object but got an invalid argument' ) ;
71
+ throw new TypeError ( 'Expected an object but got an invalid argument' ) ;
70
72
}
71
73
72
74
var cloned = data . slice ( ) ;
0 commit comments