Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 2x 2x 231x 2x 112x 112x 3x 109x 3x 106x 2x 4x 7x 2x 120x 105x 2x 118x 117x 117x 119x 1x 118x 117x 117x 2x | var $type = require('./type');
var mergeArr;
var mergeObj;
var isObj = function (item) {
return (
item
&& typeof item === 'object'
);
};
var mergeItem = function (origin, item, key) {
var prev = origin[key];
if (
$type(prev) === 'array'
&& $type(item) === 'array'
) {
mergeArr(prev, item);
} else if (
isObj(prev)
&& isObj(item)
) {
mergeObj(prev, item);
} else {
origin[key] = item;
}
};
mergeArr = function (origin, source) {
source.forEach(function (item, index) {
mergeItem(origin, item, index);
});
};
mergeObj = function (origin, source) {
Object.keys(source).forEach(function (key) {
mergeItem(origin, source[key], key);
});
};
/**
* 深度混合源对象,会保留函数引用
* @method obj/merge
* @param {Object} origin 要混合的源对象
* @param {Object} target 要混合的对象
* @returns {Object} 混合之后的对象
* @example
* var $merge = require('@spore-ui/kit/packages/obj/merge');
* var origin = {a:{b:{c:1}}};
* var target = {a:{b:{d:2}}};
* console.info($merge(origin, target));
* // {a:{b:{c:1,d:2}}};
*/
var merge = function (origin) {
if (typeof origin !== 'object') return origin;
var rests = Array.prototype.slice.call(arguments, 1);
rests.forEach(function (source) {
if ($type(source) === 'array') {
mergeArr(origin, source);
} else if (isObj(source)) {
mergeObj(origin, source);
}
});
return origin;
};
module.exports = merge;
|