const merge = (a, b) => {
const combined = new Set([...Object.values(a), ...Object.values(b)]);
return Object.fromEntries(
[...combined.values()].map((value, index) => [index, value])
);
};
merge(
{ "0": 1, "1": 2, "2": 3 },
{ "0": 4, "1": 5, "2": 1 }
);
const crazyJoin = (a, b) => Object.values(b)
.reduce((acc, c) => !!~acc.indexOf(c) ? acc : (acc.push(c), acc), Object.values(a))
.reduce((acc, c, i) => (acc[i] = c, acc), {});
crazyJoin(a, b) // {"0":1,"1":2,"2":3,"3":4,"4":5}