HarmonyOS 浅拷贝深拷贝

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

目前HarmonyOS没有直接进行深浅拷贝操作的api

1:使用三方库: https://ohpm.openharmony.cn/#/cn/detail/@wolfx%2Flodash

2:根据具体使用手写;

3:json.parse(json.stringify(obj)

具体demo如下:

import _ from '@wolfx/lodash';
export class AddForm {
  id: string = '';
  title: string = '';
}

@Entry
@Component
struct deepcopy {
  @State text: string = ""
  // loodash.cloneDeep(obj)深拷贝
  @State addForm: AddForm = { id: '小王', title: "100" }

  build() {
    Column({ space: 20 }) {
      Button("hello")
        .onClick(() => {
          let a: ESObject = deepCopy([1, 4, 7])
          console.log("yeyouzhi>>>" + a.toString())
        })
      Button("深拷贝")
        .onClick(() => {
          let form = _.cloneDeep(this.addForm)//使用cloneDeep方法实现深拷贝
          form.id = "改变";
          console.info(`原:${JSON.stringify(this.addForm)}-----拷贝${JSON.stringify(form)}`)
        })
      Button("浅拷贝")
        .onClick(() => {
          let form =this.addForm
          form.id = "改变";
          console.info(`原:${JSON.stringify(this.addForm)}-----拷贝${JSON.stringify(form)}`)
        })
    }
  }
}

function deepCopy(obj: ESObject): ESObject {
  if (typeof obj !== "object" || obj === null) {
    return obj;
  }
  let copy: ESObject;
  if (Array.isArray(obj)) {
    copy = [];
    for (let i = 0; i < obj.length; i++) {
      copy[i] = deepCopy(obj[i]);
    }
  } else {
    copy = {};
    for (let i = 0; i < obj.length(); i++) {
      let key: ESObject = obj[i];
      if (obj.hasOwnProperty(key)) {
        copy[key] = deepCopy(obj[key]);
      }
    }
  }
  return copy;
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS ArkTS 如何实现拷贝
17浏览 • 1回复 待解决
HarmonyOS pixelmap拷贝问题
658浏览 • 1回复 待解决
ArkWeb组件是否支持拷贝
591浏览 • 1回复 待解决
HarmonyOS 如何对数组进行拷贝
288浏览 • 1回复 待解决
HarmonyOS ArkWeb组件是否支持拷贝
504浏览 • 2回复 待解决
ArkTS中如何实现对象的拷贝
488浏览 • 1回复 待解决
HarmonyOS 文件拷贝示例
13浏览 • 1回复 待解决
HarmonyOS 沙箱文件拷贝
57浏览 • 1回复 待解决
HarmonyOS 相册文件拷贝
29浏览 • 1回复 待解决
HarmonyOS选取并拷贝文件失败
435浏览 • 1回复 待解决
HarmonyOS 数据库拷贝后无法读取
274浏览 • 1回复 待解决
关系数据库无法拷贝怎么回事?
2026浏览 • 1回复 待解决