Grupowanie lat produkcji po modelu samochodu

0

Hej
Mam tablicę samochodów, pobieraną z bazy danych. Każdy samochód ma następujące pola: id, marka, model, rok

Przykład kodu (bez pobrania z bazy, tylko ręcznie zadeklarowana tablica):

let arr = [
    { id: 1, brand: "Renault", year: 2017, model: "Clio" },
    { id: 2, brand: "BMW", year: 2008, model: "X5" },
    { id: 3, brand: "Volkswagen", year: 2005, model: "Passat" },
    { id: 3, brand: "Volkswagen", year: 2016, model: "Tiguan" },
    { id: 5, brand: "Renault", year: 2012, model: "Megane" },
    { id: 6, brand: "Ford", year: 2016, model: "Kuga" }
]

console.log(arr);

Chciałbym uzyskać obiekt, który zawiera listę w postaci producent -> lista roczników występujących w danych

dla powyższego przykładu:

"Renault" -> 2017, 2012
"BMW" -> 2008
"Volkswagen" -> 2005, 2016
"Ford" -> 2016

Ale nie wiem jak to zrobić :/

0

Czyli chcesz pogrupować "rok produkcji" (year) po modelu samochodu brand?

Jeśli tak to wpisz w google "js list of objects group by".

Pierwszy link z google: https://stackoverflow.com/questions/21776389/javascript-object-grouping

0

Pomocna może być też struktura danych zwana Multimap (w ogólności, nie JS)

0

Zacznij prosto, krok po kroku

  • stwórz sobie pusty obiekt z wynikami
  • pętla for (lub funkcja forEach), do przechodzenia po elementach
  • przy iteracji sprawdź czy w obiekcie jest już property takim jak Twój brand, jeżeli go nie ma to go stwórz i przypisz pustą tablicę
  • teraz jesteś już pewny, że w wynikowym obiekcie masz już result[brand] i jest to array, więc metoda push() na arrayu pozwoli ci dodać rocznik
  • i na koniec radosny console.log wyniku pozwoli ci upewnić się, że wszystko poszło świetnie

Jeżeli coś jest niejasne - podaj co zrobiłeś i pytaj co jest niejasne

0
const solution = arr.reduce((acc, nextVal) => {
  if (!acc[nextVal.brand]) {
    acc[nextVal.brand] = nextVal.year;
  } else {
    acc[nextVal.brand] = `${acc[nextVal.brand]}, ${nextVal.year}`;
  }
    return acc;
}, {})
// Log to console 
console.log(solution, '<=solution');

z zaoszczędzonym czasem ogarnij jak działa reduce pod spodem.

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