Rozwiazanie pewnego algorytmu - porownanie wlasciowsci w tablicy obiektow w chronologii wartosci.

0

Czesc szukam fajnego rozwiazania pewnego algorytmu.Glowie sie z nim caly dzien i do tej pory nie znalazlem poprawnego rozwiazania. Troche ciezko mi bylo to wytlumaczyc w samym tytule, dlatego przejde do przykladu.

Kod :

       // pierwszy zestaw danyc (zdj. po lewej)
        const data= [{
            type: 'A',
            start: 5,
            end:10,
        }, {
            type: 'B',
            start: 6,
            end: 15,
        }]
      // drugi zestaw danych (zdj. po prawej)
        const data2= [{
            type: 'A',
            start: 4,
            end:12,
        }, {
            type: 'B',
            start: 5,
            end: 10,
        },
       {
            type: 'A',
            start: 7,
            end: 16,
        }]

Rysunek pomocniczy z outputem

title

Czerwonki linie oznaczaja porownanie napotkanych wartosci, tak jakby na linii wartosci od najmniejszej do najwiekszej. Porownanie idzie chronologicznie i wypluwa jeden typ, ten ktory jest mniejszy, a pozniej laczy z typem, ktory powstal wczesniej.

W sumie to zalezy mi na rozwiazaniu, ktore jest jak najbardziej funkcyjne, jezeli tylko nie jest to konieczne, chce uniknac tymczasowych pomocniczych tablic, dlatego probowalem to zrobic w polaczeniu z reduce / map / filter ale niestety nie wyszlo.

0

Nie mam pojęcia, czy o to chodziło, ale łap, może Cie natchnę :D

const data2 = [{
    type: 'A',
    start: 4,
    end: 12,
}, {
    type: 'B',
    start: 5,
    end: 10,
}, {
    type: 'A',
    start: 7,
    end: 16,
}];

const result = [
    ...data2.map(x => `${x.type}-${x.start}`),
    ...data2.map(x => `${x.type}-${x.end}`)
].sort((x, y) => {
    x = x.split('-')[1];
    y = y.split('-')[1];

    return x - y;
}).reduce((n, x) => n + x.split('-')[0], '');
0

Super ! Dzieki!! Coprawda nie chodzi o to w 100%, bo sam zauwazylem niescisclosc ale teraz zainspirowany tym przerabiam ten kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1