如何为数组中的JavaScript对象添加键值对?哪种方式性能更优?
更优方案与性能对比
先明确你的场景:
现有数组:
documents = [{ doc1: 'abc', doc2: 'def' }]
待合并的对象:
documen = {opq: 'rst', uvw: 'xyz' }
更优实现方式
如果想把documen里的键值对批量加到数组第一个对象里,不用逐个写属性名的话,用Object.assign是更简洁的方案:
// 直接把documen的所有键值对合并到原对象 Object.assign(documents[0], documen)
执行后documents[0]会变成 { doc1: 'abc', doc2: 'def', opq: 'rst', uvw: 'xyz' }。要是你需要把opq改成doc3、uvw改成doc4这种自定义键名,也可以这么写:
Object.assign(documents[0], { doc3: documen.opq, doc4: documen.uvw })
这种写法和点标记的思路一致——直接修改原对象,但代码更紧凑,添加多个属性时更省心。
两种方案的性能差异
- 选项1(点标记赋值):性能最优。它就是直接给对象新增属性,没有任何额外的对象复制、遍历操作,是最底层的属性赋值逻辑,几乎没有开销。
- 选项2(扩展语法):性能不如选项1。扩展语法会先创建一个新对象,把原
documents[0]的所有属性都拷贝一遍,再把新属性加进去,最后替换掉数组里的原对象。这个拷贝过程会产生额外开销,原对象属性越多,性能差距越明显。
总结:如果允许直接修改原对象,选项1或者Object.assign是最优选择;如果必须保留原对象不变(不能修改它),那只能用扩展语法或者Object.assign创建新对象(比如documents[0] = Object.assign({}, documents[0], { doc3: documen.opq }))。
内容的提问来源于stack exchange,提问作者HeroicHitesh
相关产品推荐
相关产品推荐

