如何在nodejs中合并这两个数组
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 }
]
我需要这样的输出
[
{ _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);
但是,得到这样的输出
[
{ _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 }
]
请帮我做一下
实现此结果
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);
编辑:如果某个对象存在于 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
选项。
将第二个数组放入 Map 中,以便 _id
进行高效查找,然后映射第一个数组
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)
数组 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 }
]
我需要这样的输出
[
{ _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);
但是,得到这样的输出
[
{ _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 }
]
请帮我做一下
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);
编辑:如果某个对象存在于 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
选项。
将第二个数组放入 Map 中,以便 _id
进行高效查找,然后映射第一个数组
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)