将巨大数组中的每个JavaScript对象与另一个对象合并

将巨大数组中的每个JavaScript对象与另一个对象合并,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个JavaScript对象数组,其中有数百万个对象,我想将数组中的每个对象与一个具有固定键和值的特定对象合并 [{prop1:"a",prop2:"b"}, {prop1:"c",prop2:"d"}] -- Array of object {id:"1","dept":"Finance"} -- object to be merge in 目前,我正在迭代数组中的每个对象,并逐个添加键和值,这非常耗时 我正在寻找JavaScript中的另一种解决方案,它可以像批量合并一样合并两个对

我有一个JavaScript对象数组,其中有数百万个对象,我想将数组中的每个对象与一个具有固定键和值的特定对象合并

[{prop1:"a",prop2:"b"}, {prop1:"c",prop2:"d"}] -- Array of object


{id:"1","dept":"Finance"} -- object to be merge in
目前,我正在迭代数组中的每个对象,并逐个添加键和值,这非常耗时

我正在寻找JavaScript中的另一种解决方案,它可以像批量合并一样合并两个对象,而无需对每个对象进行迭代以节省CPU时间

使用
Object.assign()
合并对象

array_of_objects.forEach(obj => Object.assign(obj, object_to_merge_in));
可以使用而不使用of循环在对象数组中合并新对象

var objArr=[{prop1:“a”,prop2:“b”},{prop1:“c”,prop2:“d”},
obj={id:“1”,“dept:“Finance”};
var mapArr=objArr.map(x=>Object.assign(x,obj));

控制台日志(mapArr)首先就性能而言,它是O(n)复杂度。因此,无论您使用
object.assign
array.map
或任何其他方法,如果不循环遍历每个对象,就没有出路

如果您的项目中有这么多与json对象操作相关的工作,那么如果您使用json,生活会更轻松

该库中有许多方法是您所需要的

    _.merge(object, [sources], [customizer], [thisArg])
    _.assign(object, [sources], [customizer], [thisArg])
    _.extend(object, [sources], [customizer], [thisArg])
    _.defaults(object, [sources])
    _.defaultsDeep(object, [sources])

您希望如何在不迭代每个对象的情况下更改数组中的每个对象?你不可能比O(n)更高效,而且听起来你已经尝试过这个解决方案。为什么不在创建这些对象时添加这些道具呢?你可以用另一个对象包装数组,实现你需要的api,只在访问时合并给定的对象。有点懒。虽然可行性取决于外部包含数组的传递/使用方式,但我不知道这是否可行,和过去一样,我使用正则表达式将对象键转换为字符串,而不迭代每个对象。这会比迭代每个对象并分别添加键值对更快吗?我希望是这样,因为它是JavaScript内部高度优化的代码。@RohanKumar我认为需要一个更现实的测试@RohanKumar在你的测试中我的版本最快5%。但主要区别在于内存减少,这在数组中只有2个元素时并不明显。为什么要用
map()
创建一个新列表
Object.assign()
就地修改对象。@Barmar映射用于在内部迭代数组,Object.assign()用于从另一个数组分配/复制对象。因此,我们需要使用map来迭代每个对象,然后将一个新对象复制到一个现有对象。
object.assign()
修改第一个参数,它不会创建新对象。只有在编写
object时才能获得新对象。assign({},x,obj)
数组中有超过一百万个对象,创建新副本可能是内存问题。