|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /**
- * Module dependencies.
- */
-
- var type;
- try {
- type = require('component-type');
- } catch (_) {
- type = require('type');
- }
-
- /**
- * Module exports.
- */
-
- module.exports = clone;
-
- /**
- * Clones objects.
- *
- * @param {Mixed} any object
- * @api public
- */
-
- function clone(obj){
- switch (type(obj)) {
- case 'object':
- var copy = {};
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- copy[key] = clone(obj[key]);
- }
- }
- return copy;
-
- case 'array':
- var copy = new Array(obj.length);
- for (var i = 0, l = obj.length; i < l; i++) {
- copy[i] = clone(obj[i]);
- }
- return copy;
-
- case 'regexp':
- // from millermedeiros/amd-utils - MIT
- var flags = '';
- flags += obj.multiline ? 'm' : '';
- flags += obj.global ? 'g' : '';
- flags += obj.ignoreCase ? 'i' : '';
- return new RegExp(obj.source, flags);
-
- case 'date':
- return new Date(obj.getTime());
-
- default: // string, number, boolean, …
- return obj;
- }
- }
|