Если вам не нужен arrayList1 до arrayList2, вы можете использовать этот простой подход.Что я сделал, так это то, что я деструктурировал все элементы arrayList2 и только те элементы arrayList1, чей ключ не существует в arrayList1.
PS проблема с reduce
в том, что вам нужно уменьшить самый большой массив, иначе вы пропуститеэлементы большего массива.
const arrayList1 = [
{ type: "A", any: 11, other: "ab", props: "1" },
{ type: "B", any: 22, other: "bc", props: "2" }, // same type
{ type: "C", any: 33, other: "df", props: "3" }
];
const arrayList2 = [
{ type: "D", any: 44, other: "aa", props: "11" },
{ type: "B", any: 22, other: "bb", props: "2----2" , x: 10}, // same type
{ type: "E", any: 44, other: "cc", props: "33" }
];
const output = [...arrayList2, ...arrayList1.filter(el1 => !arrayList2.some(el2 => el2.type === el1.type))]
//[].concat(arrayList2, arrayList1.filter(el1 => !arrayList2.some(el2 => el2.type === el1.type)))
console.log(output)