UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

55 lines (54 loc) 1.48 kB
"use strict"; 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; }