出于性能考虑,ArkTS限制了ES6的Object.assign()方法。若需在ArkTS文件中扩展对象属性或合并两个对象,可以自行实现assign方法。
- 自定义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;
}
- 使用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']
}
// Merge multiple objects, and the properties of both Object One and Object Two will be attached to Object Three. When the property names are the same, the properties of the object with the lower index will overwrite the properties of the previous object
const multiObjectMerged = assign(objectThree, objectTwo, objectOne);
console.log('multiObjectMerged is:' + JSON.stringify(multiObjectMerged));
console.log('objectThree is:' + JSON.stringify(objectThree));
// Merge the properties of Object One into Object Two, and the value of Object Two will change. When the property names are the same, Object One will overwrite the properties of Object Two
const objectMerged = assign(objectTwo, objectOne);
console.log('objectTwo is:' + JSON.stringify(objectTwo));
console.log('objectMerged is:' + JSON.stringify(objectMerged));
}
https://coub.com/view/8195coreue
https://coub.com/view/zgr28q2a9p
https://coub.com/view/2strlii5w6
https://coub.com/view/1t52yrj2i0
https://coub.com/view/y31v2ykdg1
https://coub.com/view/1lz15ffpsc
https://coub.com/view/9jtoqznjux
https://coub.com/view/tbd5lc31vt
https://coub.com/view/7t12bkgp0t
https://coub.com/view/5og9wtuo92
https://coub.com/view/8k9t7tu1yq
https://coub.com/view/4pl59p8uf1
https://coub.com/view/p6z9tbz3zk
https://coub.com/view/ibh6bgwqp3
https://coub.com/view/0i0wuth9db
https://coub.com/view/xy2086d3e2
https://coub.com/view/iw4q7qtckx
https://coub.com/view/pxz1566i5w
https://coub.com/view/h34inm7xg8
https://coub.com/view/f0wsctkxrl
https://coub.com/view/a3w8eg6xtl
https://coub.com/view/anxsjc7g0r
https://coub.com/view/u2z2wjvhdq
https://coub.com/view/9j54x43hzk
https://coub.com/view/0hd2auccvx
https://coub.com/view/6h3vprpxzh
https://coub.com/view/bkdhfnbw1g
https://coub.com/view/vdhik3gpmd
https://coub.com/view/c7yzkn92uh
https://coub.com/view/8ttqun07xf
https://coub.com/view/rd2h1klrv4
https://coub.com/view/icj4ngdhp6
https://coub.com/view/q4pehylbhw
https://coub.com/view/0nrmk0kz49
https://coub.com/view/u9usopzwax
https://coub.com/view/tlxb97yqyz
https://coub.com/view/wom8812uc5
https://coub.com/view/tqeuyjarne
https://coub.com/view/nf9zf7txkg
https://coub.com/view/6p2n697dry
https://coub.com/view/k1q6crwnkq
https://coub.com/view/ahxqnrgrp3
https://coub.com/view/4iv8n0tk8l
https://coub.com/view/k06729flrk
https://coub.com/view/ay742qzz89
https://coub.com/view/aoa9hvo9q5
https://coub.com/view/melroo5iep
https://coub.com/view/jo5s53629h
https://coub.com/view/his6eti3qh
https://coub.com/view/cvcvxa8osd
https://coub.com/view/0nzr2ukp40
https://coub.com/view/jutebaq6ve
https://coub.com/view/yrxp380et4
https://coub.com/view/72guxld0oa
https://coub.com/view/tq4qcnpo63
https://coub.com/view/n6liv4qf5w
https://coub.com/view/at7e8ru0bb
https://coub.com/view/92o6y6detn
https://coub.com/view/koacf5x00z
https://coub.com/view/11e0yx80pm
https://coub.com/view/4qwgncvdrg
https://coub.com/view/qpnp4f5xhm
https://coub.com/view/q07fu194vp
https://coub.com/view/uowpvmszkd
https://coub.com/view/at8ew5ux8e
https://coub.com/view/he5pjqy52j
https://coub.com/view/x5txpnsmdo
https://coub.com/view/t11ff28ycy
https://coub.com/view/5lcyhuqzdc
https://coub.com/view/lg2zqpum88
https://coub.com/view/qshxeiory5
https://coub.com/view/0srgljhpa1
https://coub.com/view/mot2f2tlbm
https://coub.com/view/y9c5b8fspq
https://coub.com/view/ohv1ues6rm
https://coub.com/view/w3e09gtbgz
https://coub.com/view/yaxb2cwuan
https://coub.com/view/d34xeiyfmf
https://coub.com/view/ysllfrd902
https://coub.com/view/rnwya920dg
https://coub.com/view/82gqsprq0r
https://coub.com/view/kcjb50jchx
https://coub.com/view/oamiat3e63
https://coub.com/view/f2f7yy0opt
https://coub.com/view/7g8oh9o1od
https://coub.com/view/gvtu8yphu4
https://coub.com/view/cl84qcbp6h
https://coub.com/view/5v3z3ygltp
https://coub.com/view/vuqw6u07g8
https://coub.com/view/79udij0dk3
https://coub.com/view/pca8zb9xd1
https://coub.com/view/rgr5mfbbiz
https://coub.com/view/t5543gulgc
https://coub.com/view/at8lp1d002
https://coub.com/view/9gzpsvheyb
https://coub.com/view/t3vycw9tz8
https://coub.com/view/4fbxffwkjb
https://coub.com/view/366nnnpeiu
https://coub.com/view/q701n727c1
https://coub.com/view/gcfaxwg4ls
https://coub.com/view/rj1vay3pjw
https://coub.com/view/iymexmz0xt
https://coub.com/view/814gv1gid0
https://coub.com/view/g2ho7ufdny
https://coub.com/view/dwo0405ysb
https://coub.com/view/lcj1ksnsts
https://coub.com/view/c38cbhrgqh
https://coub.com/view/nxbrpd9puy
https://coub.com/view/dgmj4h8kj6
https://coub.com/view/bqutr2ehne
https://coub.com/view/9xnj9haur0
https://coub.com/view/14w484x321
https://coub.com/view/vmyezo4oph
https://coub.com/view/3bof0yr7bm
https://coub.com/view/imi52trjr8
https://coub.com/view/c4n2zzivy2
https://coub.com/view/3cnx0jq4hs
https://coub.com/view/i8t262vuwi
https://coub.com/view/j1ibk1w8km
https://coub.com/view/y9hq5nk4pc
https://coub.com/view/2pzmvdg0hc
https://coub.com/view/14kxp47ww3
https://coub.com/view/jufl9ynnps
https://coub.com/view/fnd02t0lt3
https://coub.com/view/hyfpxys787
https://coub.com/view/cr764o8e56
https://coub.com/view/1z7g31dlly
https://coub.com/view/8dmdjx1qwx
https://coub.com/view/nbdg8cl8hn
https://coub.com/view/knjtqlb2s1
https://coub.com/view/8c57ym7txx
https://coub.com/view/pp7k5fy8li
https://coub.com/view/7jkrekf6w4
https://coub.com/view/a2ngcjavtp
https://coub.com/view/atogibvqch
https://coub.com/view/7eykx55jsf
https://coub.com/view/pq9hgzevs1
https://coub.com/view/1e8s3h4g22
https://coub.com/view/w12nltp69t
https://coub.com/view/4719lprmow
https://coub.com/view/h9f5b1j011
https://coub.com/view/c815obcgyr
https://coub.com/view/ouv0rm1cqz
https://coub.com/view/vhya189x5k
https://coub.com/view/5gzu29f3nx
https://coub.com/view/nzvh36oit1
https://coub.com/view/ry8y41yg1l
https://coub.com/view/4ycpvn7xev
https://coub.com/view/opfxxrxdnc
https://coub.com/view/vyc1rig87a
https://coub.com/view/rm80hxsjjk
https://coub.com/view/i6zfoxdumq
https://coub.com/view/ztbn51t4ds
https://coub.com/view/kqn3a3vv45
https://coub.com/view/nyrdt4wddq
https://coub.com/view/bz5hmdie1c
https://coub.com/view/asf3kge230
https://coub.com/view/f1og3v6t3d
https://coub.com/view/k70qr0365u
https://coub.com/view/u0k2fftc4x
https://coub.com/view/okha7escmw
https://coub.com/view/p6sgoj5v15
https://coub.com/view/uvqwnqp9fg
https://coub.com/view/fi5vlxmzhi
https://coub.com/view/lsp4mukekb
https://coub.com/view/hxnk4y4c5a
https://coub.com/view/9wq3yxk4q4
https://coub.com/view/fiz8o6wdov
https://coub.com/view/zki91z6kv5
https://coub.com/view/an26fwc64n
https://coub.com/view/pn5nkl4tuz
https://coub.com/view/2tt3uw5i2n
https://coub.com/view/lhlbtkem1f
https://coub.com/view/bpq53mzita
https://coub.com/view/4mw5epmcej
https://coub.com/view/elgt2ichn1
https://coub.com/view/gbftuvmnne
https://coub.com/view/zpgwkki9fb
https://coub.com/view/dulk5ckz88
https://coub.com/view/1fnbrposhy
https://coub.com/view/325s5tzlic
https://coub.com/view/a9x4tgizhd
https://coub.com/view/wtrx56k9ms
https://coub.com/view/cglx3ak6xe
https://coub.com/view/kers9wy3rd
https://coub.com/view/1g1e2dlprr
https://coub.com/view/6k75ywz3e1
https://coub.com/view/tdtaaqxjl3
https://coub.com/view/xsytgpogu5
https://coub.com/view/a5ud2vvf9k
https://coub.com/view/x6h3c01gco
https://coub.com/view/9y0nrp1i8n
https://coub.com/view/pu7b7isdtg
https://coub.com/view/zaqmsf4bug
https://coub.com/view/gaq6mcno5r
https://coub.com/view/byiy9pedi7
https://coub.com/view/fxzyrtd1p1
https://coub.com/view/2mevjn9axt
https://coub.com/view/gkajq9uoxo
https://coub.com/view/md89l8u4jk
https://coub.com/view/b9zh2uznvu
https://coub.com/view/jcbkul3sgq
https://coub.com/view/tx9eur56es
https://coub.com/view/2cht97e08o
https://coub.com/view/67bgpv42c2
https://coub.com/view/9f9zntto8c
https://coub.com/view/a7drn18wup
https://coub.com/view/1k7xig5f45
https://coub.com/view/botifvobw0
https://coub.com/view/2v0ezs37h6
https://coub.com/view/6gd5rw6b6a
https://coub.com/view/0yhofi4djm
https://coub.com/view/fye3gbzulb
https://coub.com/view/jdoyksa8ha
https://coub.com/view/z7wgd9fcgc
https://coub.com/view/wg62vjjb9j
https://coub.com/view/uxmrq3ucu6
https://coub.com/view/xedkqt5ud5
https://coub.com/view/8f3j9bq91e
https://coub.com/view/h5m4ejx2il
https://coub.com/view/q53r6sd64z
https://coub.com/view/0ni0q101ak
https://coub.com/view/ax7uepfbz9
https://coub.com/view/ys0a9ud29w
https://coub.com/view/ni4syuc2gx
https://coub.com/view/e5dnutb53i
https://coub.com/view/i3khkjgnwr
https://coub.com/view/c4yrnx2t8x
https://coub.com/view/babuaryyid
https://coub.com/view/y4ep1a2vcp
https://coub.com/view/eoqvphxtgy
https://coub.com/view/xo5fhuvgx8
https://coub.com/view/cv9zijq4x7
https://coub.com/view/rpbtbktqce
https://coub.com/view/x4jezvha2j
https://coub.com/view/24g8hpdj60
https://coub.com/view/yugycctwj7
https://coub.com/view/vf2501f493
https://coub.com/view/hif4omebxd
https://coub.com/view/4c2270uxil
https://coub.com/view/gsgot35ny8
https://coub.com/view/zx8skpvmxq
https://coub.com/view/552wl4quq4
https://coub.com/view/6t0jskyr7x
https://coub.com/view/wgtgsff2br
https://coub.com/view/l0hkvipp1e
https://coub.com/view/34qmsa39qk
https://coub.com/view/ej9pvigs11
https://coub.com/view/s2er3xn1r3
https://coub.com/view/1ibj88zfms
https://coub.com/view/gjlg0ybs6k
https://coub.com/view/aft6nbd1ig
https://coub.com/view/wna32t6l0n
https://coub.com/view/i3jbg3fp99
https://coub.com/view/7aanp3fd55
https://coub.com/view/rx2oyn2o27
https://coub.com/view/b1w4pfpc68
https://coub.com/view/wdcdxtrl1z
https://coub.com/view/d9ngtug2vl
https://coub.com/view/pmzebgzvcg
https://coub.com/view/w116aq8m1p
https://coub.com/view/1u1rhwir00
https://coub.com/view/601f24iv5h
https://coub.com/view/7gfou5uu53
https://coub.com/view/oavrufncw4
https://coub.com/view/9z0yvjeok1
https://coub.com/view/oi2dhjpp8l
https://coub.com/view/58t0e8tmrt
https://coub.com/view/pko30fc9g2
https://coub.com/view/2ss7gtj1i9
https://coub.com/view/nhrvovoroc
https://coub.com/view/n8jsg0ivkz
https://coub.com/view/nvondhs5dt
https://coub.com/view/k48hrz9oqs
https://coub.com/view/ei7wyo5g8e
https://coub.com/view/kr72gkehrd
https://coub.com/view/sp5n615s92
https://coub.com/view/56g36twrzq
https://coub.com/view/xvcd8jdcpj
https://coub.com/view/lgt7hw4gna
https://coub.com/view/yqcp2v02nb
https://coub.com/view/ib37b15stj
https://coub.com/view/thcp23jlqi
https://coub.com/view/ucjmfqq12l
https://coub.com/view/os1b06f1s9
https://coub.com/view/llx0y8kp07
https://coub.com/view/n044vjieqt
https://coub.com/view/l9a6g0byuy
https://coub.com/view/f0i0rcma75
https://coub.com/view/bcmmzjhvs5
https://coub.com/view/85mrdeyeph
https://coub.com/view/rlkwxvj8m0
https://coub.com/view/x8fnw3532f
https://coub.com/view/cglxlhv4ci
https://coub.com/view/65hgs6q9pi
https://coub.com/view/79sp0xtn50
https://coub.com/view/6zoyra0b5c
https://coub.com/view/4nv8oognd4
https://coub.com/view/5qceo0ka85
https://coub.com/view/r9szutzj2o
https://coub.com/view/bh3jxqpyeu
https://coub.com/view/bnc3sckoro
https://coub.com/view/1vxwq483dh
https://coub.com/view/x2wjrcq4ql
https://coub.com/view/i2658lyitr
https://coub.com/view/pbush7yeim
https://coub.com/view/l7ey99f5uk
https://coub.com/view/ajbr7s6i4v
https://coub.com/view/1gp6t5ead3
https://coub.com/view/vr850p2641
https://coub.com/view/2k4gpeusg6
https://coub.com/view/01sl2sct1d
1 个回复
Ask小助手 - Ask社区AI助手
在 uni-app x 中,由于 ArkTS 对 ES6 的
Object.assign()有性能限制,推荐通过自定义assign方法实现对象合并。以下是针对 鸿蒙平台 的完整实现方案:1. 自定义 assign 方法(uts 实现)
类型说明:
target: 目标对象,类型为Record<string, Object>source: 源对象数组,支持传入多个对象2. 使用示例(鸿蒙平台)
3. 关键注意事项
引用类型特性:
assign方法会直接修改target对象。如需保留原对象,请先创建副本:覆盖规则:当多个源对象存在同名属性时,索引较小的源对象(在参数列表中靠后)会覆盖索引较大的源对象。
类型安全:在 uts 中使用时,建议为复杂对象定义明确的接口(如示例中的
IMerge),避免使用any类型,以确保编译期类型检查。鸿蒙平台限制:该方法适用于鸿蒙 Next 的 ArkTS 环境,符合 uni-app x 对强类型和性能的要求。
与 Object.assign 的差异:此实现仅支持浅拷贝。如需深拷贝嵌套对象,需递归实现或使用其他深拷贝方案。
4. 平台兼容性
参考文档:如需了解 uts 类型系统的更多细节,请查阅 uts 数据类型文档。
要回复问题请先登录或注册
公告
更多>相关问题