Map, find i stworzenie nowego obiektu

Odpowiedz Nowy wątek
2020-03-24 23:13

Rejestracja: 1 rok temu

Ostatnio: 1 dzień temu

0

Cześć, mam następującą linijkę kodu w ts:

this.meters.map(mtr => this.metersDiag.find(mtrDiag => mtrDiag.Name == mtr.systemName))

Czyli jak wiadomo generalnie wyszukuję sobie elementy listy z metersDiag. Moim celem jest utworzenie nowego obiektu, który będzie posiadał w sobie propertisy zarówno z meters jak i metersDiag. W jaki sposób jest możlwe coś takiego zachowując jednolinijkowy kod?

powiem tak, poczytaj o reduce w js (metoda tablicy) i spread operator jeśli chcesz w 1 linijcie. Ale to złe podejście, mniej czytelne - phanc 2020-03-27 23:29

Pozostało 580 znaków

2020-03-24 23:21

Rejestracja: 3 miesiące temu

Ostatnio: 2 godziny temu

0

to jest bez sensu? co ty wogóle chcesz zrobić? jakie jest polecenie? co to jest meters, i metersDiag.
I dlaczego mapujesz meteres.

Jej, ile Ty byś chciał wiedzieć. :P - Silv 2020-03-27 23:18

Pozostało 580 znaków

2020-03-25 11:03

Rejestracja: 4 lata temu

Ostatnio: 2 godziny temu

2

Nie wiem czy wiesz ale w ES6 pojawił się spread operator:

const obj1 = {dupa: 1}
const obj2 = {kupa: 2}
const obj3 = {...obj1, ...obj2}

Wiedza to potęga
edytowany 1x, ostatnio: Haskell, 2020-03-25 11:04

Pozostało 580 znaków

2020-03-26 12:16

Rejestracja: 1 rok temu

Ostatnio: 1 dzień temu

0

Dobrze, w takim razie opiszę cały problem wraz z tabelami i obiektami, które się w nich znajdują. Chciałbym temat ogarnąć tak jak należy, używając odpowiednich funkcji oferowanych przez ES, żeby nie robić zbędnych pętli i różnych innych dziwnych rzeczy.

Zatem sprawa wygląda tak. Mam następujące trzy tablice:

connections:

[
    {name: "Conn1", mtrList: [{id: 1}, {id: 2}]},
    {name: "Conn2", mtrList: [{id: 2}, {id: 3}]}
]

meters:

[
    {id: 1, name: "Mtr1", systemName: "sysMtr1"},
    {id: 2, name: "Mtr2", systemName: "sysMtr2"},
    {id: 3, name: "Mtr3", systemName: "sysMtr3"},
    {id: 4, name: "Mtr4", systemName: "sysMtr4"},
    {id: 5, name: "Mtr5", systemName: "sysMtr5"}
]

metersDiag:

[
    {name: "sysMtr1", status: true, value: 23},
    {name: "sysMtr2", status: true, value: 24},
    {name: "sysMtr3", status: true, value: 25},
    {name: "sysMtr4", status: true, value: 26},
    {name: "sysMtr5", status: true, value: 27}
]

Cel, który chcę osiągnąć to zgrupowanie elementów meters (uzupełnionych o niektóre propertisy znajdujące się w metersDiag) wg tego co znajduje się w connections w mtrList (są to id metersów). Metersy, które nie należą do żadnych connections chciałbym wrzucić do jakiejś osobnej grupy. Czyli w wyniku wszystkich operacji chciałbym uzyskać coś następującego:

[
    {name: "Conn1", mtrList: 
                [{id: 1, name: "Mtr1", systemName: "sysMtr1", value: 23},
                {id: 2, name: "Mtr2", systemName: "sysMtr2", value: 24}]
    },
    {name: "Conn2", mtrList: 
                [{id: 2, name: "Mtr2", systemName: "sysMtr2", value: 24},
                {id: 3, name: "Mtr3", systemName: "sysMtr3", value: 25}]
    },
    {name: "Ungrouped", mtrList: 
                [{id: 4, name: "Mtr4", systemName: "sysMtr4", value: 26},
                {id: 5, name: "Mtr5", systemName: "sysMtr5", value: 27}]
    },
]

Podejrzewam, że stosując odpowiednie funkcje można to osiągnąć w kilku linijkach. Czy ktoś mógłby mi zasugerować takie rozwiązanie?

edytowany 2x, ostatnio: kamilos95, 2020-03-28 13:22
Może dodaj znaczniki ```javascript i ```. - Silv 2020-03-27 23:22

Pozostało 580 znaków

Odpowiedz

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