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}