【问题标题】:Merge two arrays of Objects by value returned from MongoDB按从 MongoDB 返回的值合并两个对象数组
【发布时间】:2019-04-18 05:39:50
【问题描述】:

问题

我需要按值合并从 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. _.merge 从 lodash
  2. _.map 和 _.从 lodash 扩展
  3. 各种原生 javascript .map 函数

【问题讨论】:

    标签: javascript arrays mongodb mongoose


    【解决方案1】:

    一种可能的解决方案是使用Array.map() 而不是array1 并从array2Array.find() 获取相关的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;}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      相关资源
      最近更新 更多