Show More
Commit Description:
add model solution
Commit Description:
add model solution
References:
File last commit:
Show/Diff file:
Action:
node_modules/es5-ext/object/assign-deep.js
| 34 lines
| 1.1 KiB
| application/javascript
| JavascriptLexer
|
r789 | "use strict"; | |||
var includes = require("../array/#/contains") | ||||
, uniq = require("../array/#/uniq") | ||||
, copyDeep = require("./copy-deep") | ||||
, objForEach = require("./for-each") | ||||
, isPlainObject = require("./is-plain-object") | ||||
, ensureValue = require("./valid-value"); | ||||
var isArray = Array.isArray, slice = Array.prototype.slice; | ||||
var deepAssign = function (target, source) { | ||||
if (target === source) return target; | ||||
if (isPlainObject(target) && isPlainObject(source)) { | ||||
objForEach(source, function (value, key) { target[key] = deepAssign(target[key], value); }); | ||||
return target; | ||||
} | ||||
if (isArray(target) && isArray(source)) { | ||||
source.forEach(function (item) { | ||||
if (includes.call(target, item)) return; | ||||
if (isArray(item) || isPlainObject(item)) item = copyDeep(item); | ||||
target.push(item); | ||||
}); | ||||
return target; | ||||
} | ||||
if (isPlainObject(source) || isArray(source)) return copyDeep(source); | ||||
return source; | ||||
}; | ||||
module.exports = function (target/*, ...objects*/) { | ||||
return uniq | ||||
.call([ensureValue(target)].concat(slice.call(arguments, 1).map(ensureValue))) | ||||
.reduce(deepAssign); | ||||
}; | ||||