vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
55 lines (54 loc) • 1.48 kB
JavaScript
exports.__esModule = true;
exports.cloneDeepFast = cloneDeepFast;
// @ts-nocheck
// Copyright 2019 "David Mark Clements <david.mark.clements@gmail.com>"
// MIT Licensed
// https://github.com/davidmarkclements/rfdc
// Modified by Jay Fong
/**
* 深克隆快速版。
*
* @param value 要克隆的值
* @param ignore 忽略的值
* @returns 返回克隆后的值
* @example
* ```typescript
* cloneDeepFast({ x: [1] })
* // => { x: [1] }
* ```
*/
function cloneDeepFast(value, ignore) {
if (typeof value !== 'object' || value === null) return value;
if (value instanceof Date) return new Date(value);
if (Array.isArray(value)) return cloneArray(value, ignore);
var o2 = {};
for (var k in value) {
if (Object.hasOwnProperty.call(value, k) === false) continue;
var cur = value[k];
if (typeof cur !== 'object' || cur === null || ignore && ignore(cur)) {
o2[k] = cur;
} else if (cur instanceof Date) {
o2[k] = new Date(cur);
} else {
o2[k] = cloneDeepFast(cur, ignore);
}
}
return o2;
}
function cloneArray(a, ignore) {
var keys = Object.keys(a);
var a2 = new Array(keys.length);
for (var i = 0; i < keys.length; i++) {
var k = keys[i];
var cur = a[k];
if (typeof cur !== 'object' || cur === null || ignore && ignore(cur)) {
a2[k] = cur;
} else if (cur instanceof Date) {
a2[k] = new Date(cur);
} else {
a2[k] = cloneDeepFast(cur, ignore);
}
}
return a2;
}
;