Skip to content

Commit c706e33

Browse files
committed
refactored traverse function
1 parent bc87d60 commit c706e33

File tree

2 files changed

+50
-23
lines changed

2 files changed

+50
-23
lines changed

src/demo/users_data.js

+36
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,24 @@ export default () => {
117117
$date: '2016-12-16T00:00:00'
118118
}
119119
}
120+
],
121+
periods: [
122+
{
123+
start_date: {
124+
$date: '2017-01-01T00:00:00Z'
125+
},
126+
amount: 1000,
127+
_id: {
128+
$oid: '59ef6461bee3c00d09a53cfc'
129+
},
130+
things: [
131+
{
132+
_id: {
133+
$oid: '59ef6461bee3c00d09a53cfc'
134+
}
135+
}
136+
]
137+
}
120138
]
121139
},
122140
three: {
@@ -164,6 +182,24 @@ export default () => {
164182
$date: '2016-03-11T00:00:00'
165183
}
166184
}
185+
],
186+
periods: [
187+
{
188+
start_date: {
189+
$date: '2017-01-01T00:00:00Z'
190+
},
191+
amount: 1000,
192+
_id: {
193+
$oid: '59ef6461bee3c00d09a53cfc'
194+
},
195+
things: [
196+
{
197+
_id: {
198+
$oid: '59ef6461bee3c00d09a53cfc'
199+
}
200+
}
201+
]
202+
}
167203
]
168204
}
169205
}

src/utils/index.js

+14-23
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
mergeDeepRight,
33
clone,
4-
path,
54
reduce,
65
isEmpty,
76
equals
@@ -112,44 +111,36 @@ const traverse = (data, schema, func) => {
112111
let output = {}
113112
if (data instanceof Array) {
114113
output = data.map(item => {
115-
if (schema.items.type) {
116-
if ([Object, Array].includes(schema.items.type)) {
117-
item = traverse(item, schema.items, func)
118-
} else {
119-
item = func(item, schema.items)
120-
}
114+
if ([Object, Array].includes(schema.items.type)) {
115+
item = traverse(item, schema.items, func)
116+
} else {
117+
item = func(item, schema.items)
121118
}
122119
return item
123120
})
124121
} else if (data instanceof Object) {
125122
for (let key in data) {
126-
validateSchema(schema, key)
127-
if (schema[key] && schema[key].items) {
128-
output[key] = traverse(data[key], schema[key], func)
129-
} else if (schema[key] && schema[key].properties) {
130-
output[key] = traverse(data[key], schema[key].properties, func)
131-
} else if (schema && schema.properties) {
123+
if (key in schema) {
124+
if (schema[key].items) {
125+
output[key] = traverse(data[key], schema[key], func)
126+
} else if (schema[key].properties) {
127+
output[key] = traverse(data[key], schema[key].properties, func)
128+
} else {
129+
output[key] = func(data[key], schema[key])
130+
}
131+
} else if (schema.properties) {
132132
output = traverse(data, schema.properties, func)
133-
// output[key] = func(data[key], schema.properties[key])
134-
} else if (key in schema) {
135-
output[key] = func(data[key], schema[key])
136133
} else {
134+
console.warn('Key missing from schema: ' + key)
137135
output[key] = data[key]
138136
}
139137
}
140138
} else {
141-
// found a normal key: value prop
142139
output = func(data, schema)
143140
}
144141
return output
145142
}
146143

147-
const validateSchema = (schema, key) => {
148-
if ((schema[key] === undefined) && (path(['properties', key], schema) === undefined)) {
149-
console.warn(`Key missing from schema: ${key}`)
150-
}
151-
}
152-
153144
// encode a model property
154145

155146
export const encodeProperty = (data, schema = {}) => {

0 commit comments

Comments
 (0)