const arr1 = [{i:0, w: 2}, {i:0, w: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w: 2}]
const arr2 = [{i:2, d: 4}, {i:3, g: 2}]
const res = [{i:0, w: 2, i:2, d: 4},{i:0, w: 2, i:3, g: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w:2}]
const merge = (...arrs) =>
Array.from(
{ length: Math.max(...arrs.map(n => n.length)) },
(_, i) => Object.assign({}, ...arrs.map(n => n[i]))
);
const arr = merge(arr1, arr2);
const merge = (...arrs) =>
arrs.reduce((acc, n) => (
n.forEach((m, i) => Object.assign(acc[i] ??= {}, m)),
acc
), []);