UNPKG

1.9 kBJavaScriptView Raw
1"use strict";
2var typeObj = require("./isType");
3var isDate = typeObj.isDate, isRegExp = typeObj.isRegExp, isFunction = typeObj.isFunction, isArray = typeObj.isArray;
4function cloneDeep(values) {
5 var parents = [];
6 var children = [];
7 function clone(values) {
8 var num = parents.indexOf(values);
9 if (~num) {
10 return children[num];
11 }
12 var copy;
13 if (values == null || (typeof values !== 'object' && !isFunction(values)))
14 return values;
15 if (isDate(values)) {
16 copy = new Date();
17 copy.setTime(values.getTime());
18 return copy;
19 }
20 if (isRegExp(values)) {
21 copy = new RegExp(values.source, getRegExp(values));
22 if (values.lastIndex) {
23 copy.lastIndex = values.lastIndex;
24 }
25 return copy;
26 }
27 if (isFunction(values)) {
28 return new Function("return " + values)();
29 }
30 if (isArray(values)) {
31 copy = [];
32 parents.push(values);
33 children.push(copy);
34 for (var i = 0, len = values.length; i < len; i++) {
35 copy[i] = clone(values[i]);
36 }
37 return copy;
38 }
39 if (values instanceof Object) {
40 var proto = Object.getPrototypeOf(values);
41 copy = Object.create(proto);
42 parents.push(values);
43 children.push(copy);
44 for (var attr in values) {
45 copy[attr] = clone(values[attr]);
46 }
47 return copy;
48 }
49 }
50 return clone(values);
51}
52var getRegExp = function (re) {
53 var flags = '';
54 if (re.global)
55 flags += 'g';
56 if (re.ignoreCase)
57 flags += 'i';
58 if (re.multiline)
59 flags += 'm';
60 return flags;
61};
62module.exports = cloneDeep;
63//# sourceMappingURL=cloneDeep.js.map
\No newline at end of file