ArkTS中如何实现对象的深拷贝?

ArkTS中如何实现对象的深拷贝?

HarmonyOS
2024-11-05 09:36:04
浏览
收藏 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("mydeepCopy>>>" + 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-11-05 17:55:15


相关问题
HarmonyOS 对象实现拷贝
1199浏览 • 1回复 待解决
HarmonyOS 浅拷贝拷贝
1311浏览 • 1回复 待解决
HarmonyOS pixelmap拷贝问题
1562浏览 • 1回复 待解决
HarmonyOS 如何对数组进行拷贝
1201浏览 • 1回复 待解决
HarmonyOS imagepixelmap如何进行拷贝
659浏览 • 1回复 待解决
ArkWeb组件是否支持拷贝
1545浏览 • 1回复 待解决
HarmonyOS ArkTS 如何实现拷贝
1035浏览 • 1回复 待解决
HarmonyOS ArkWeb组件是否支持拷贝
1520浏览 • 2回复 待解决
如何ArkTS合并对象
1815浏览 • 1回复 待解决
ArkTs如何获取对象类名
3569浏览 • 1回复 待解决
如何ArkTS合并对象
2459浏览 • 1回复 待解决
ArkTS如何使用字典类型对象
1441浏览 • 1回复 待解决
json如何ArkTS解析到Array对象
973浏览 • 2回复 待解决