Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按值合并2个JS对象数组_Javascript_Arrays_Merge - Fatal编程技术网

Javascript 按值合并2个JS对象数组

Javascript 按值合并2个JS对象数组,javascript,arrays,merge,Javascript,Arrays,Merge,问题 我需要合并两个Javascript对象数组。我需要通过匹配每个数组中包含的单个key:value对的唯一值来进行合并。我要基于的值的键不同 我想根据匹配的唯一值将数组2中的key:value对添加到数组1中的正确对象。array1.user和array2.\u id的值是我需要匹配的值 阵列 我尝试过的 我曾经尝试过像这样使用lodash的u.map和u.extend函数,但我对lodash是新手,它没有给我正确的输出 const mergedArray = _.map(array1,

问题

我需要合并两个Javascript对象数组。我需要通过匹配每个数组中包含的单个key:value对的唯一值来进行合并。我要基于的值的键不同

我想根据匹配的唯一值将数组2中的key:value对添加到数组1中的正确对象。array1.user和array2.\u id的值是我需要匹配的值

阵列

我尝试过的

我曾经尝试过像这样使用lodash的u.map和u.extend函数,但我对lodash是新手,它没有给我正确的输出

  const mergedArray = _.map(array1, function(item){
    return _.extend(item, _.find(array2, {_id: item.user}));
  });
结果

期望的结果

您可以使用和

如果数组的映射顺序相同,则可以避免使用
find

const-array1=[{u-id:`5c6c7132f9bf4bdab9c906ff`,用户:`5c65d9438e4a834c8e85dd7d`,{u-id:`5c6ccd6d3a0dc4e4951c2be`,用户:`5c65d9438e4a834c8e85dd7e`]
const array2=[{id:'5c65d9438e4a834c8e85dd7d`,信息:{姓名:'John',城市:'New York'}},{id:'5c65d9438e4a834c8e85dd7e`,信息:{姓名:'Paneer',城市:'San Fran'}]
const final=array1.map(e=>{
const found=array2.find(({u id})=>e.user===u id)
返回{
E
信息:found.info
}
})
console.log(final)
您可以获取一个并为结果构建新对象

const
array1=[{u-id:'5c6c7132f9bf4bdab9c906ff',用户:'5c65d9438e4a834c8e85dd7d',{u-id:'5c6ccd6d3a0dc4e4951c2bee',用户:'5c65d9438e4a834c8e85dd7e'},
array2=[{id:'5c65d9438e4a834c8e85dd7d',信息:{name:'John',city:'New York'}},{id:'5c65d9438e4a834c8e85dd7e',信息:{name:'Paneer',city:'San Fran'}],
users=newmap(array2.Map(({u-id,info})=>[[u-id,{info}]),
merged=array1.map(o=>({…o,…(users.get(o.user)|{}));
console.log(合并)

.as console wrapper{max height:100%!important;top:0;}
另一种方法是生成一个带有键的对象,然后直接使用生成的对象获取值。密钥访问非常快

const array1=[{u id:“5c6c7132f9bf4bdab9c906ff”,用户:“5c65d9438e4a834c8e85dd7d},{u id:“5c6ccd6d3a0dc4e4951c2be”,用户:“5c65d9438e4a834c8e85dd7e}];
const-id=array1.reduce((a,{user,{uid})=>({…a,[user]:{uid}),{});
const array2=[{id:“5c65d9438e4a834c8e85dd7d”,信息:{姓名:'John',城市:'纽约'},{id:“5c65d9438e4a834c8e85dd7e”,信息:{姓名:'Paneer',城市:'旧金山'};
array2.forEach(o=>{
o、 用户=o.\U id;
o、 _id=id[o._id];
});
控制台日志(array2)

作为控制台包装{max height:100%!important;top:0;}
为什么它们是数组?是否有要求的分拣顺序?如果没有,您似乎有唯一的id,这使得结构作为一个对象更加方便,而
\u id
是关键。然后你可以很容易地通过ID查找,避免所有的迭代。我需要合并的两个数组的可能重复实际上是从MongoDB返回的,出于某种原因,我尝试过的任何方法都不起作用,即使相同的方法对javascript数组非常有效。您对如何将此解决方案应用于MongoDB返回的阵列有何建议?如果有区别的话,我会使用Mongoose。我需要合并的两个数组实际上是从MongoDB返回的,出于某种原因,我尝试过的任何方法都不起作用,即使相同的方法对javascript数组非常有效。您对如何将此解决方案应用于MongoDB返回的阵列有何建议?如果有区别的话,我用的是猫鼬。
  const mergedArray = _.map(array1, function(item){
    return _.extend(item, _.find(array2, {_id: item.user}));
  });
mergedArray [ { _id: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } },
  { _id: 5c65d9438e4a834c8e85dd7e,
    info: { name: 'Paneer', city: 'San Fran' } }]
const mergedArray = [ { _id: 5c6c7132f9bf4bdab9c906ff,
    user: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } } ,
  { _id: 5c6ccd6d3a0dc4e4951c2bee,
    user: 5c65d9438e4a834c8e85dd7e, 
    info: { name: 'Paneer', city: 'San Fran' } } ]