javascript - 按 MongoDB 返回的值合并两个对象数组

标签 javascript arrays mongodb mongoose

问题

我需要合并从 MongoDB 按值返回的两个数组,但是我尝试过的所有用于常规 javascript 数组的方法都无法正常工作。我们将非常感谢您的帮助

数组

array1 = [ { _id: 5c6c7132f9bf4bdab9c906ff,
    user: 5c65d9438e4a834c8e85dd7d },
  { _id: 5c6ccd6d3a0dc4e4951c2bee,
    user: 5c65d9438e4a834c8e85dd7e } ]

array2 = users [ { _id: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } },
  { _id: 5c65d9438e4a834c8e85dd7e,
    info: { name: 'Paneer', city: 'San Fran' } } ]

期望的结果

mergedArray = [ { _id: 5c6c7132f9bf4bdab9c906ff,
    user: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } } ,
  { _id: 5c6ccd6d3a0dc4e4951c2bee,
    user: 5c65d9438e4a834c8e85dd7e, 
    info: { name: 'Paneer', city: 'San Fran' } } ]

我尝试过的

  1. _.从lodash合并
  2. _.map 和 _.从 lodash 扩展
  3. 各种普通的 javascript .map 函数

最佳答案

一种可能的解决方案是使用 Array.map()通过 array1 并使用 Array.find()array2 获取相关的 info 数据:

const array1 = [
  {_id: '5c6c7132f9bf4bdab9c906ff', user: '5c65d9438e4a834c8e85dd7d'},
  {_id: '5c6ccd6d3a0dc4e4951c2bee', user: '5c65d9438e4a834c8e85dd7e'}
];

const array2 = [
  {
    _id: '5c65d9438e4a834c8e85dd7d',
    info: { name: 'John', city: 'New York' }
  },
  {
    _id: '5c65d9438e4a834c8e85dd7e',
    info: { name: 'Paneer', city: 'San Fran' }
  }
];

let merged = array1.map(
    o => ({...o, info: array2.find(({_id}) => _id === o.user).info})
);

console.log(merged);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

关于javascript - 按 MongoDB 返回的值合并两个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736245/

相关文章:

javascript - 如何访问订阅 channel 的人员列表?

arrays - 从每个数组中提取一个数字,使数字之和为 0?

javascript - 问答游戏,比较单选按钮的值来回答

mongodb - 如何在数组项上添加新字段

java - Mongo 3.2 驱动程序的新聚合功能,使用 Java

javascript - Mongodb 聚合 - 今天按小时分组

javascript - HTML/JavaScript : On Click Enable/UnDisable Input Fields?

javascript - 当第一个可观察值需要在第二个中时,如何在 angular2 中链接两个可观察值

javascript - 在 iframe 中访问 jqgrid

javascript - 在javascript中使用多个循环检查多个条件