123456789101112131415161718192021222324252627282930313233343536373839404142 |
- "use strict";
- var forEach = require("./for-each")
- , isPlainObject = require("./is-plain-object")
- , ensureValue = require("./valid-value")
- , isArray = Array.isArray
- , copy
- , copyItem;
- copyItem = function (value) {
- 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(ensureValue(source));
- if (obj !== source) return obj;
- return copy.call([[], []], obj);
- };
|