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 arrs = [ arr1, arr2 ];
.const result = arrs.reduce((acc, n) => (
n.forEach((m, i) => Object.assign(acc[i] ??= {}, m)),
acc
), []);
function* zip(data, defaultValue = null) {
const iterators = Array.from(data, n => n[Symbol.iterator]());
for (let doneAll = false; doneAll = !doneAll;) {
const values = [];
for (const n of iterators) {
const { value, done } = n.next();
values.push(done ? defaultValue : value);
doneAll &&= done;
}
if (!doneAll) {
yield values;
}
}
}
const result = Array.from(zip(arrs), n => Object.assign({}, ...n));