Jeśli danych jest mało, to nie ma co się bawić.
Jeśli danych będzie dużo, to faktycznie naiwne lecenie i wyszukiwanie liniowe razy tyle, ile jest rekordów w drugiej tablicy będzie dość słabe
Wtedy złożoność byłaby w najgorszym wypadku O(m * n) , czy jakoś tak.
Więc bym wtedy próbował zoptymalizować szukanie.
- jeśli tablica jest posortowana, to można zastosować szukanie binarne (binary search). Jak nie jest posortowana, to można posortować (ale samo sortowanie też może się odbić na wydajności, więc nie wiem, czy gra warta świeczki)
- albo można wrzucić dane w mapę, jak @obscurity napisał. Albo w obiekt, gdzie klucze to ideki. Np. ja bym coś takiego zastosował:
Kopiuj
const debtsByUserId = Object.create(null)
listOfUsersDebts.forEach(debt => debtsByUserId[debt.id] = debt.dlug);
listOfUsers.forEach(user => {
console.log(`#${user.id} ${user.imie}, dlug: ${debtsByUserId[user.id]}`);
});
Kopiuj
const debtByUser = new Map(listOfUsersDebts.map(({id, dlug}) => [id, dlug]))
Algorytmicznie ma sens, jednak tutaj wchodzi kiepski design JSa i .map() tworzy ci nową tablicę (zamiast być po prostu iteratorem). Więc jeśli masz milion elementów, to najpierw zostanie utworzona niepotrzebnie nowa tablica z milionami elementów tylko po to, żeby przekazać ją do konstruktora Map. Trzeba by jakiegoś benchmarka zrobić, ale obstawiam, że uniknięcie .map() i zrobienie tego bardziej imperatywnie może być szybsze.