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

如何合并两个对象


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
相关问题
有谁知道如何新建一卡片?
33浏览 • 1回复 待解决
有谁知道如何实现一表格
808浏览 • 1回复 待解决
有谁知道如何创建 JSONObject
45浏览 • 1回复 待解决
有谁知道如何生成UUID
683浏览 • 1回复 待解决
有谁知道如何主动关闭应用
834浏览 • 1回复 待解决
有谁知道flexBasis使用问题
471浏览 • 1回复 待解决
有谁知道如何获取IMEI码
899浏览 • 1回复 待解决
有谁知道如何屏蔽触摸事件
671浏览 • 1回复 待解决
有谁知道如何监听屏幕旋转
925浏览 • 1回复 待解决
有谁知道如何强制退出app?
37浏览 • 1回复 待解决
有谁知道如何获取应用包信息
827浏览 • 1回复 待解决
有谁知道如何计算文本的宽度
1054浏览 • 1回复 待解决
有谁知道web组件如何下拉刷新
862浏览 • 1回复 待解决
有谁知道如何访问沙盒路径
34浏览 • 1回复 待解决
有谁知道如何注册app的页面
72浏览 • 1回复 待解决
有谁知道如何拦截住页面返回
242浏览 • 3回复 待解决
有谁知道如何获取系统api版本
802浏览 • 1回复 待解决
有谁知道沙箱目录怎么获取
1105浏览 • 1回复 待解决
有谁知道应用升级的方式
886浏览 • 1回复 待解决
有谁知道常用AppFreeze使用指导
281浏览 • 1回复 待解决
有谁知道Image图片取反色
953浏览 • 1回复 待解决
有谁知道如何屏蔽多指触控
936浏览 • 1回复 待解决
有谁知道如何拉起浏览器应用
850浏览 • 1回复 待解决
有谁知道an\ai文件是什么
741浏览 • 1回复 待解决
有谁知道是否支持帧动画
973浏览 • 1回复 待解决