added whole system from ola4doc
This commit is contained in:
+38
@@ -0,0 +1,38 @@
|
||||
'use strict';
|
||||
|
||||
var forEach = require('./for-each')
|
||||
, isPlainObject = require('./is-plain-object')
|
||||
, value = require('./valid-value')
|
||||
|
||||
, isArray = Array.isArray
|
||||
, copy, copyItem;
|
||||
|
||||
copyItem = function (value, key) {
|
||||
var index;
|
||||
if (!isPlainObject(value) && !isArray(value)) return value;
|
||||
index = this[0].indexOf(value);
|
||||
if (index === -1) return copy.call(this, value);
|
||||
return this[1][index];
|
||||
};
|
||||
|
||||
copy = function (source) {
|
||||
var target = isArray(source) ? [] : {};
|
||||
this[0].push(source);
|
||||
this[1].push(target);
|
||||
if (isArray(source)) {
|
||||
source.forEach(function (value, key) {
|
||||
target[key] = copyItem.call(this, value, key);
|
||||
}, this);
|
||||
} else {
|
||||
forEach(source, function (value, key) {
|
||||
target[key] = copyItem.call(this, value, key);
|
||||
}, this);
|
||||
}
|
||||
return target;
|
||||
};
|
||||
|
||||
module.exports = function (source) {
|
||||
var obj = Object(value(source));
|
||||
if (obj !== source) return obj;
|
||||
return copy.call([[], []], obj);
|
||||
};
|
||||
Reference in New Issue
Block a user