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; 
}
分享
微博
QQ
微信
回复
2024-11-05 17:55:15
相关问题
HarmonyOS pixelmap拷贝问题
486浏览 • 1回复 待解决
HarmonyOS 如何对数组进行拷贝
162浏览 • 1回复 待解决
ArkWeb组件是否支持拷贝
467浏览 • 1回复 待解决
HarmonyOS ArkWeb组件是否支持拷贝
394浏览 • 2回复 待解决
如何ArkTS合并对象
1006浏览 • 1回复 待解决
ArkTs如何获取对象类名
2470浏览 • 1回复 待解决
如何ArkTS合并对象
1439浏览 • 1回复 待解决
如何实现ArkTS与C/C++对象传递
586浏览 • 1回复 待解决
ArkTS对象绑定C++对象如何回收?
848浏览 • 1回复 待解决
ArkTS如何实现反射?
283浏览 • 1回复 待解决
如何ArkTS实现接口?
117浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS对象
2186浏览 • 1回复 待解决
如何ArkTS实现JSON和Map转换?
2960浏览 • 1回复 待解决
如何在Native侧释放ArkTS对象
2300浏览 • 1回复 待解决
ArkTSWeb交互、网络请求如何实现
275浏览 • 1回复 待解决