HarmonyOS 浅拷贝深拷贝

HarmonyOS
2024-12-24 15:39:48
1231浏览
收藏 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;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
分享
微博
QQ
微信
回复
2024-12-24 17:56:55


相关问题
HarmonyOS ArkTS 如何实现拷贝
1102浏览 • 1回复 待解决
HarmonyOS pixelmap拷贝问题
1621浏览 • 1回复 待解决
HarmonyOS 对象实现拷贝
1271浏览 • 1回复 待解决
ArkWeb组件是否支持拷贝
1589浏览 • 1回复 待解决
HarmonyOS 如何对数组进行拷贝
1290浏览 • 1回复 待解决
HarmonyOS ArkWeb组件是否支持拷贝
1576浏览 • 2回复 待解决
HarmonyOS image的pixelmap如何进行拷贝
710浏览 • 1回复 待解决
ArkTS中如何实现对象的拷贝
1906浏览 • 1回复 待解决
HarmonyOS 文件拷贝示例
726浏览 • 1回复 待解决
HarmonyOS 相册文件拷贝
584浏览 • 1回复 待解决
HarmonyOS 沙箱文件拷贝
1319浏览 • 1回复 待解决
HarmonyOS选取并拷贝文件失败
968浏览 • 1回复 待解决
HarmonyOS 拷贝文件至沙盒
1178浏览 • 1回复 待解决
HarmonyOS rawfile文件拷贝到沙箱
1189浏览 • 1回复 待解决
HarmonyOS 数据库拷贝后无法读取
956浏览 • 1回复 待解决
怎么实现跨设备拷贝粘贴功能
312浏览 • 0回复 待解决
HarmonyOS RawFile下的文件的拷贝
715浏览 • 1回复 待解决