js-wrench
Version:
JS函数库
92 lines (73 loc) • 5.39 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: deepCopy.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: deepCopy.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>import isArray from './isArray';
import isDate from './isDate';
import isRegExp from './isRegExp';
/**
* @description 对象深拷贝
* 来源Vuex https://github.com/vuejs/vuex/blob/dev/src/util.js 解决了循环引用问题
* 对其深度拷贝进行二次优化, 添加Date其他类型的判断 {time:new Date(), regexp:/\w+/}
* @param {*} obj 要进行拷贝的源数据
* @param {Array<any>} [cache=[]] 利用数组存储已经拷贝过的数据, 每次拷贝会从cache中查询有没有拷贝过
* @return {*} {*} 返回拷贝的数据
* @example deepCopy({age:12, time:new Date(), regexp:/\w+/, fn:function(){}}, [])
*/
const deepCopy = (obj, cache = []) => {
if (obj === null || typeof obj !== 'object')
return obj;
let hit = cache.filter(function (c) {
return c.original === obj;
})[0];
if (hit)
return hit.copy;
let copy;
//添加Date和RegExp类型
if (isDate(obj))
copy = new Date(obj);
else if (isRegExp(obj))
copy = new RegExp(obj);
else if (isArray(obj))
copy = [];
else
copy = {};
cache.push({
original: obj,
copy,
});
Object.keys(obj).forEach((key) => {
copy[key] = deepCopy(obj[key], cache);
});
return copy;
};
export default deepCopy;
</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="CheckRegExp.html">CheckRegExp</a></li><li><a href="Format.html">Format</a></li></ul><h3>Global</h3><ul><li><a href="global.html#bind">bind</a></li><li><a href="global.html#debounce">debounce</a></li><li><a href="global.html#deepCopy">deepCopy</a></li><li><a href="global.html#each">each</a></li><li><a href="global.html#empty">empty</a></li><li><a href="global.html#extend">extend</a></li><li><a href="global.html#getBrowserType">getBrowserType</a></li><li><a href="global.html#getUID">getUID</a></li><li><a href="global.html#getVerifyCode">getVerifyCode</a></li><li><a href="global.html#has">has</a></li><li><a href="global.html#includes">includes</a></li><li><a href="global.html#indexOf">indexOf</a></li><li><a href="global.html#isAndroid">isAndroid</a></li><li><a href="global.html#isArray">isArray</a></li><li><a href="global.html#isBool">isBool</a></li><li><a href="global.html#isDate">isDate</a></li><li><a href="global.html#isFn">isFn</a></li><li><a href="global.html#isIOS">isIOS</a></li><li><a href="global.html#isiPad">isiPad</a></li><li><a href="global.html#isMap">isMap</a></li><li><a href="global.html#isNaN">isNaN</a></li><li><a href="global.html#isNull">isNull</a></li><li><a href="global.html#isNumber">isNumber</a></li><li><a href="global.html#isObj">isObj</a></li><li><a href="global.html#isPC">isPC</a></li><li><a href="global.html#isPrimitive">isPrimitive</a></li><li><a href="global.html#isPromise">isPromise</a></li><li><a href="global.html#isRegExp">isRegExp</a></li><li><a href="global.html#isSet">isSet</a></li><li><a href="global.html#isString">isString</a></li><li><a href="global.html#isSymbol">isSymbol</a></li><li><a href="global.html#isUndefined">isUndefined</a></li><li><a href="global.html#isWPhone">isWPhone</a></li><li><a href="global.html#ltrim">ltrim</a></li><li><a href="global.html#noop">noop</a></li><li><a href="global.html#random">random</a></li><li><a href="global.html#remove">remove</a></li><li><a href="global.html#reverse">reverse</a></li><li><a href="global.html#rtrim">rtrim</a></li><li><a href="global.html#throttle">throttle</a></li><li><a href="global.html#toFirstLower">toFirstLower</a></li><li><a href="global.html#toFirstUpper">toFirstUpper</a></li><li><a href="global.html#toKeys">toKeys</a></li><li><a href="global.html#toLowerCase">toLowerCase</a></li><li><a href="global.html#toParam">toParam</a></li><li><a href="global.html#toQuery">toQuery</a></li><li><a href="global.html#toUpperCase">toUpperCase</a></li><li><a href="global.html#toValues">toValues</a></li><li><a href="global.html#trim">trim</a></li><li><a href="global.html#typeOf">typeOf</a></li><li><a href="global.html#unique">unique</a></li><li><a href="global.html#uniqueToArray">uniqueToArray</a></li><li><a href="global.html#uniqueToNumber">uniqueToNumber</a></li><li><a href="global.html#uniqueToSizzArray">uniqueToSizzArray</a></li><li><a href="global.html#uniqueToSttring">uniqueToSttring</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.6</a> on Wed Dec 16 2020 10:48:43 GMT+0800 (GMT+08:00)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>