Из малого сделать "словарь", где ключ _id (чтобы удобнее искать). Пройти по большому массиву, дописывая дефолтные поля с нулями. Если в "словаре" нашёлся соотв. id, то взять поля из него:
const arrBig = [
{ _id: 1, one: 7, two: 5 },
{ _id: 2, one: 6, two: 3 },
{ _id: 3, one: 4, two: 7 },
{ _id: 4, one: 15, two: 2 },
];
const arrSmall = [{ _id: 1, next: 22, gen: 54 }, { _id: 3, next: 6, gen: 3 }];
const key = '_id';
const dictSmall = arrSmall.reduce((acc, c) => {
acc[c[key]] = c;
return acc;
}, {});
const template = { next: 0, gen: 0 };
const addKeys = Object.keys(template);
const result = arrBig.map(item => {
const nuItem = { ...item, ...template };
const addendum = dictSmall[item[key]];
if (addendum) {
addKeys.forEach(key => (nuItem[key] = addendum[key]));
}
return nuItem;
});
/* [
{"_id":1,"one":7,"two":5,"next":22,"gen":54},
{"_id":2,"one":6,"two":3,"next":0,"gen":0},
{"_id":3,"one":4,"two":7,"next":6,"gen":3},
{"_id":4,"one":15,"two":2,"next":0,"gen":0}
] */