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拷贝问题
431浏览 • 1回复 待解决
HarmonyOS 如何对数组进行拷贝
112浏览 • 1回复 待解决
ArkWeb组件是否支持拷贝
428浏览 • 1回复 待解决
HarmonyOS ArkWeb组件是否支持拷贝
365浏览 • 2回复 待解决
如何ArkTS合并对象
1355浏览 • 1回复 待解决
如何ArkTS合并对象
929浏览 • 1回复 待解决
ArkTs如何获取对象类名
2422浏览 • 1回复 待解决
如何实现ArkTS与C/C++对象传递
503浏览 • 1回复 待解决
ArkTS对象绑定C++对象如何回收?
805浏览 • 1回复 待解决
ArkTS如何实现反射?
195浏览 • 1回复 待解决
如何ArkTS实现JSON和Map转换?
2809浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS对象
2093浏览 • 1回复 待解决
ArkTSWeb交互、网络请求如何实现
194浏览 • 1回复 待解决
ArkTs实现vueslot思路
407浏览 • 1回复 待解决
如何在Native侧释放ArkTS对象
2267浏览 • 1回复 待解决
如何判断对象是某个interface实现
963浏览 • 1回复 待解决