繁体   English   中英

如何在nodejs中合并这两个arrays

[英]How to merge these two arrays in nodejs

阵列 1:

[
  { _id: '01', user: 0, vendor: 1, driver: 0 },
  { _id: '04', user: 2, vendor: 15, driver: 2 },
  { _id: '05', user: 24, vendor: 10, driver: 1 },
  { _id: '06', user: 0, vendor: 18, driver: 0 }
]

阵列 2:

[
  { _id: '04', order: 20 },
  { _id: '05', order: 28 },
  { _id: '06', order: 3 },
  { _id: '08', order: 1 }
]

我需要这样的 output

[
  { _id: '01', user: 0, vendor: 1, driver: 0 },
  { _id: '04', user: 2, vendor: 15, driver: 2, order: 20 },
  { _id: '05', user: 24, vendor: 10, driver: 1, order: 28 },
  { _id: '06', user: 0, vendor: 18, driver: 0, order: 3 },
  { _id: '08', user: 0, vendor: 0, driver: 0, order: 1 }
]

我正在使用 lodash 合并数组,

let merge = _.merge(arr1, arr2);

但是,像这样得到这个 output

 [
  { _id: '04', user: 0, vendor: 1, driver: 0, order: 20 },
  { _id: '05', user: 2, vendor: 15, driver: 2, order: 28 },
  { _id: '06', user: 24, vendor: 10, driver: 1, order: 4 },
  { _id: '06', user: 0, vendor: 18, driver: 0 }
]

请帮我这样做

您可以使用map实现此结果并找到

 const arr1 = [ { _id: "01", user: 0, vendor: 1, driver: 0 }, { _id: "04", user: 2, vendor: 15, driver: 2 }, { _id: "05", user: 24, vendor: 10, driver: 1 }, { _id: "06", user: 0, vendor: 18, driver: 0 }, ]; const arr2 = [ { _id: "04", order: 20 }, { _id: "05", order: 28 }, { _id: "06", order: 4 }, ]; const result = arr1.map((obj) => { const objInArr2 = arr2.find((o) => o._id === obj._id); if (objInArr2) return {...obj, ...objInArr2 }; else return {...obj }; }); console.log(result);

编辑:如果某些 object 存在于arr2但不存在于arr1

 const arr1 = [ { _id: "01", user: 0, vendor: 1, driver: 0 }, { _id: "04", user: 2, vendor: 15, driver: 2 }, { _id: "05", user: 24, vendor: 10, driver: 1 }, { _id: "06", user: 0, vendor: 18, driver: 0 }, ]; const arr2 = [ { _id: "04", order: 20 }, { _id: "05", order: 28 }, { _id: "06", order: 3 }, { _id: "08", order: 1 }, ]; const result = arr1.map((obj) => { const objInArr2 = arr2.find((o) => o._id === obj._id); if (objInArr2) return {...obj, ...objInArr2 }; else return {...obj }; }); arr2.forEach((obj) => { const isExist = result.find((o) => o._id === obj._id); if (.isExist) result:push({ user, 0: vendor, 0: driver, 0. ..;obj }); }). console;log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

 let arr1 = [ { _id: '01', user: 0, vendor: 1, driver: 0 }, { _id: '04', user: 2, vendor: 15, driver: 2 }, { _id: '05', user: 24, vendor: 10, driver: 1 }, { _id: '06', user: 0, vendor: 18, driver: 0 } ]; let arr2 = [ { _id: '04', order: 20 }, { _id: '05', order: 28 }, { _id: '06', order: 4 } ]; arr2.forEach(e => { let obj = arr1.find(a => a._id === e._id); if(obj) obj.order = e.order }); console.log(arr1);

如果您使用的是lodash ,请尝试改用mergeWith 确保使用customizer器选项。

另一种方式https://www.npmjs.com/search?q=merge%20deep

将第二个数组放入 Map 以通过_id进行有效查找,然后是 map 第一个数组

 const arr1=[ { _id: '01', user: 0, vendor: 1, driver: 0 }, { _id: '04', user: 2, vendor: 15, driver: 2 }, { _id: '05', user: 24, vendor: 10, driver: 1 }, { _id: '06', user: 0, vendor: 18, driver: 0 } ] const arr2=[ { _id: '04', order: 20 }, { _id: '05', order: 28 }, { _id: '06', order: 4 } ] const arr2Map = new Map(arr2.map(({_id,...r}) => [_id, r])) const res = arr1.map(e => Object.assign({}, e, arr2Map.get(e._id))) console.log(res)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM