1 | var _ = require('underscore');
|
2 |
|
3 | function getIntersection(template, inputObj) {
|
4 |
|
5 | var templateKeys = _.keys(template);
|
6 | var inputObjKeys = _.keys(inputObj);
|
7 | var intersectionKeys = _.intersection(templateKeys, inputObjKeys);
|
8 |
|
9 | var objKeys = _.filter(intersectionKeys, function(key) {
|
10 | return _.isObject(template[key]) && _.isObject(inputObj[key]);
|
11 | });
|
12 |
|
13 | var valueKeys = _.difference(intersectionKeys, objKeys);
|
14 | var valueIntersection = _.pick(inputObj, valueKeys);
|
15 |
|
16 | if(_.size(objKeys) <= 0)
|
17 | return valueIntersection;
|
18 |
|
19 | var objIntersection = {};
|
20 |
|
21 | _.each(objKeys, function(key) {
|
22 | objIntersection[key] = getIntersection(template[key], inputObj[key]);
|
23 | });
|
24 |
|
25 | return _.extend({}, valueIntersection, objIntersection);
|
26 |
|
27 | };
|
28 |
|
29 | module.exports = getIntersection;
|
30 |
|