AngularJS Łączenie dwóch tabel pobranych z Api

0

Witam, posiadam dwie tabele które pobieram z web Api po adresie www. Potrzebuje złączyć dwie tabele i za pomocą ng-repeat wrzucić je do tabeli i wyświetlić. Np. Table1: ma kolumny: [Id, imie, nazwisko, pesel] a druga Table2: ma kolumny: id, adres, numer telefonu. Jak zrobi ć by wyświetlić te dane w jednej tabeli po id? Najbardziej nie wiem jak to zdefiniować w kontrolerze. Przekopałem cały internet i nie znalazłem odpowiedzi. Proszę o pomoc

0

Nie składaj danych w widoku, zrób to w wcześniej, za pomocą zwykłego jsa, albo najlepiej złóż to już w zapytaniu sql

0

Robisz for-a dla pierwszej tablicy, wewnątrz pierwszego for-a iterujesz się po drugiej tablicy. Jeśli ID w drugiej tablicy będzie równe ID pierwszej tablicy dodajesz elementy drugiej do pierwszej tablicy. Ot, cała magia. Tak jak wspomniał kolega wyżej, najlepiej byłoby to zrobić w SQL-u.

0

a mogłbym prosić jakiś przykład jak to zrobić z poziomu js pobierając dane z Api? Szukałem w necie ale nie znalazłem konkretów

0

Bez przesady, kto wyciąga 1500 rekordów naraz ;-). Jak masz ujednoliconą strukturę danych, to owszem, możesz kombinować coś w stylu addAll, itp., ale w tym wypadku wydaję mi się, że zostaje tylko ręczna robótka.
Jak masz jakiś inny pomysł, chętnie się dokształcę.

0
Złoty Rycerz napisał(a):

Robisz for-a dla pierwszej tablicy, wewnątrz pierwszego for-a iterujesz się po drugiej tablicy. Jeśli ID w drugiej tablicy będzie równe ID pierwszej tablicy dodajesz elementy drugiej do pierwszej tablicy. Ot, cała magia. Tak jak wspomniał kolega wyżej, najlepiej byłoby to zrobić w SQL-u.

Tak naprawdę nie wiadomo jaka jest struktura tych danych, jeśli kluczami w tablicy są skorelowane ze sobą idi-ki z bazy to można to zrobić w jednej pętli ale jeśli struktura jest bardziej rozmyta to zostają niestety 2 for-y, oczywiście najlepiej byłoby zrobić joina w SQL-u, wystawić nową usługę (jeśli nie można zmodyfikować tamtych restów) i byłoby po temacie.

0

Zakładając, że dane wyglądają tak jak w przykładzie na końcu masz tu przykład mergowania tych tablic ze złożonością liniową (dowolna ilość tablic, w każdej tablicy dopuszczalne luki), jeśli id ma różne nazwy w tych tablicach to można lekko zmodyfikować funkcję:

function mergeBy(fieldName, ...arrays) {
  const result = {}
  
  arrays.forEach(arr => arr.forEach(element => {
    result[element[fieldName]] = Object.assign({}, result[element[fieldName]], element)
  }));
  
  return Object.values(result)
}

// Example:
const a = [
  {
    id: 1,
    firstName: 'John',
    lastName: 'Doe',
    pesel: '88012700942',
  },
  {
    id: 2,
    firstName: 'Mark',
    lastName: 'Twain',
    pesel: '88012700940',
  },
]

const b = [
  {
    id: 1,
    address: 'Some Street 1',
    phone: '123456789',
  },
  {
    id: 2,
    address: 'Some Street 2',
    phone: '123456780',
  },
]

console.log(mergeBy('id', a, b))

CodePen: https://codepen.io/caderek/pen/QMORjN?editors=0012

Nie jest to pewnie rozwiązanie optymalne, ale powinno styknąć.

PS
Jak nie wiesz jak operować na tablicach (nawet nieoptymalnie), to polecam wrócić do czystego JSa, zamiast brnąć w Angulara którego nie zrozumiesz.

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