16e80583aSopenharmony_ci/** 26e80583aSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 36e80583aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46e80583aSopenharmony_ci * you may not use this file except in compliance with the License. 56e80583aSopenharmony_ci * You may obtain a copy of the License at 66e80583aSopenharmony_ci * 76e80583aSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86e80583aSopenharmony_ci * 96e80583aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106e80583aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116e80583aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126e80583aSopenharmony_ci * See the License for the specific language governing permissions and 136e80583aSopenharmony_ci * limitations under the License. 146e80583aSopenharmony_ci */ 156e80583aSopenharmony_ci 166e80583aSopenharmony_ci/** 176e80583aSopenharmony_ci * 对象拷贝工具类 186e80583aSopenharmony_ci * */ 196e80583aSopenharmony_ci 206e80583aSopenharmony_ciexport class ObjectCopyUtil { 216e80583aSopenharmony_ci /** 226e80583aSopenharmony_ci * 判断对象是否为数组 236e80583aSopenharmony_ci * 246e80583aSopenharmony_ci * @param obj 256e80583aSopenharmony_ci * @returns 266e80583aSopenharmony_ci */ 276e80583aSopenharmony_ci private static IsArray(obj: any) { 286e80583aSopenharmony_ci return obj && typeof obj == "object" && obj instanceof Array; 296e80583aSopenharmony_ci } 306e80583aSopenharmony_ci 316e80583aSopenharmony_ci /** 326e80583aSopenharmony_ci * 对象深拷贝 336e80583aSopenharmony_ci * 346e80583aSopenharmony_ci * @param tSource 356e80583aSopenharmony_ci * @returns 366e80583aSopenharmony_ci */ 376e80583aSopenharmony_ci public static DeepClone<T>(tSource: T, tTarget?: Record<string, any> | T): T { 386e80583aSopenharmony_ci if (this.IsArray(tSource)) { 396e80583aSopenharmony_ci tTarget = tTarget || []; 406e80583aSopenharmony_ci } else { 416e80583aSopenharmony_ci tTarget = tTarget || {}; 426e80583aSopenharmony_ci } 436e80583aSopenharmony_ci for (const key in tSource) { 446e80583aSopenharmony_ci if (Object.prototype.hasOwnProperty.call(tSource, key)) { 456e80583aSopenharmony_ci if (typeof tSource[key] === "object" && typeof tSource[key] !== null) { 466e80583aSopenharmony_ci tTarget[key] = this.IsArray(tSource[key]) ? [] : {}; 476e80583aSopenharmony_ci this.DeepClone(tSource[key], tTarget[key]); 486e80583aSopenharmony_ci } else { 496e80583aSopenharmony_ci tTarget[key] = tSource[key]; 506e80583aSopenharmony_ci } 516e80583aSopenharmony_ci } 526e80583aSopenharmony_ci } 536e80583aSopenharmony_ci return tTarget as T; 546e80583aSopenharmony_ci } 556e80583aSopenharmony_ci 566e80583aSopenharmony_ci /** 576e80583aSopenharmony_ci * 对象浅拷贝 586e80583aSopenharmony_ci * 596e80583aSopenharmony_ci * @param tSource 606e80583aSopenharmony_ci * @returns 616e80583aSopenharmony_ci */ 626e80583aSopenharmony_ci public static SimpleClone<T>(tSource: T, tTarget?: Record<string, any> | T): T { 636e80583aSopenharmony_ci if (this.IsArray(tSource)) { 646e80583aSopenharmony_ci tTarget = tTarget || []; 656e80583aSopenharmony_ci } else { 666e80583aSopenharmony_ci tTarget = tTarget || {}; 676e80583aSopenharmony_ci } 686e80583aSopenharmony_ci for (const key in tSource) { 696e80583aSopenharmony_ci if (Object.prototype.hasOwnProperty.call(tSource, key)) { 706e80583aSopenharmony_ci tTarget[key] = tSource[key]; 716e80583aSopenharmony_ci } 726e80583aSopenharmony_ci } 736e80583aSopenharmony_ci return tTarget as T; 746e80583aSopenharmony_ci } 756e80583aSopenharmony_ci}