 
  
  function merge(key, ...arrs) {
  const getKey = key instanceof Function ? key : n => n[key];
  const result = new Map;
  arrs.forEach(arr => arr.forEach(n => {
    const k = getKey(n);
    result.set(k, Object.assign(result.get(k) ?? {}, n));
  }));
  return [...result.values()];
}const result = merge('id', arr1, arr2, arr3);.      const res = [...a, ...b, ...c] // склеили
const logicalFunction = (acc, item)=>{
    if(acc[item.id]){
        // попытка мержа , merge напиши сам 
         acc[item.id] = merge(acc[item.id], item);
    } else {
        acc[item.id] = item;
    }
    return acc;
}
const obj = res.reduce(logicalFunction, {});
const final = Object.values(obj).sort((a,b)=b.id-a.id)