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

- Rejestracja:ponad 9 lat
- Ostatnio:około 3 lata
- Lokalizacja:Warszawa
- Postów:1264
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
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.

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.

- Rejestracja:ponad 9 lat
- Ostatnio:około 3 lata
- Lokalizacja:Warszawa
- Postów:1264
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.