有谁知道如何合并两个对象

如何合并两个对象


HarmonyOS
2024-03-17 13:59:48
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
morning_dxm

出于性能考虑,目前ArkTS限制了ES6的Object.assign()方法的使用。若需要在ets文件中扩展对象属性或合并两个对象时,可以自行实现assign方法。

1. 自定义assign方法

function assign(target: Record<string, Object>, ...source: Object[]): Record<string, Object> { 
  for (const items of source) { 
    for (const key of Object.keys(items)) { 
      target[key] = Reflect.get(items, key) 
    } 
  } 
  return target; 
}

2. 使用assign方法

interface IMergeSub { 
  testString: string, 
  testObject?: IMergeSub, 
  testArray?: Array<number> 
} 
 
interface IMerge { 
  a: IMergeSub, 
  b: IMergeSub[], 
  c: string[], 
  d: number 
} 
 
export function testAssign() { 
  let objectOne: IMerge = 
    { 
      a: { 
        testString: 'objectOne-a-testString', 
        testObject: { 
          testString: 'objectOne-a-testObject-testString' 
        }, 
        testArray: [1] 
      }, 
      b: [{ 
        testString: 'objectOne-b-testString', 
        testObject: { 
          testString: 'objectOne-b-testObject-testString' 
        }, 
        testArray: [2] 
      }], 
      c: ['objectOne-c'], 
      d: 3 
    } 
 
  let objectTwo: Record<string, Object> = { 
    'a': 'objectTwo-a', 
    'c': ['objectTwo-c'], 
    'e': 1 
  } 
 
  let objectThree: Record<string, Object> = { 
    'f': ['objectThree-f'] 
  } 
 
  // 合并多个对象,ObjectOne和ObjectTwo的属性都将附加到ObjectThree上,属性名相同时入参下标靠后的对象属性覆盖前面的对象属性 
  const multiObjectMerged = assign(objectThree, objectTwo, objectOne); 
  console.log('multiObjectMerged is:' + JSON.stringify(multiObjectMerged)); 
  console.log('objectThree is:' + JSON.stringify(objectThree)); 
 
  // 合并ObjectOne的属性到ObjectTwo,ObjectTwo的值会改变,属性名称相同时ObjectOne会覆盖ObjectTwo的属性 
  const objectMerged = assign(objectTwo, objectOne); 
  console.log('objectTwo is:' + JSON.stringify(objectTwo)); 
  console.log('objectMerged is:' + JSON.stringify(objectMerged)); 
}
分享
微博
QQ
微信
回复
2024-03-18 16:52:12
相关问题
有谁知道如何实现一表格
183浏览 • 1回复 待解决
有谁知道如何主动关闭应用
232浏览 • 1回复 待解决
有谁知道如何屏蔽触摸事件
180浏览 • 1回复 待解决
有谁知道如何获取IMEI码
213浏览 • 1回复 待解决
有谁知道如何监听屏幕旋转
128浏览 • 1回复 待解决
有谁知道如何计算文本的宽度
264浏览 • 1回复 待解决
有谁知道如何获取应用包信息
199浏览 • 1回复 待解决
有谁知道如何获取系统api版本
186浏览 • 1回复 待解决
有谁知道Image图片取反色
180浏览 • 1回复 待解决
有谁知道沙箱目录怎么获取
310浏览 • 1回复 待解决
有谁知道应用升级的方式
281浏览 • 1回复 待解决
有谁知道如何屏蔽多指触控
284浏览 • 1回复 待解决
有谁知道如何拉起浏览器应用
143浏览 • 1回复 待解决
有谁知道an\ai文件是什么
162浏览 • 1回复 待解决
有谁知道是否支持帧动画
344浏览 • 1回复 待解决
有谁知道如何引入三方so
509浏览 • 1回复 待解决
有谁知道如何直接调起图片库
169浏览 • 1回复 待解决
有谁知道如何使用hdc命令截屏
439浏览 • 2回复 待解决
有谁知道如何获取状态栏高度
251浏览 • 1回复 待解决
vp、fp、px的区别,有谁知道
273浏览 • 1回复 待解决
有谁知道napi多函数导出写法
161浏览 • 1回复 待解决
有谁知道常用hdc命令使用指导
326浏览 • 1回复 待解决
有谁知道是否支持Emoj表情包
303浏览 • 1回复 待解决
有谁知道Menu菜单的触发方式
244浏览 • 1回复 待解决
有谁知道有没有类似lodash库
234浏览 • 1回复 待解决