• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

algorytm do porownania tablic javascript, nodejs

VPS Starter Arubacloud
0 głosów
268 wizyt
pytanie zadane 3 lipca 2020 w JavaScript przez icytower Bywalec (2,110 p.)

hej potrzebuję porównać dwie tablice jedna z nich to tablica z wartościami liczbowymi, druga to tablica obiektów, którą otrzymałem z bazy danych.

const array1 = [1,2,3,4,5];
const array2 = [
{ id: 1},
{ id: 2},
{ id: 3},
{ id: 4},
]

w każdym obiekcie są też jakieś inne dane, jednak są zupełnie bez znaczenia przy tej operacji. wynikiem mają być wartości z array1, których nie ma w array2. jedyne co mi przychodzi do głowy to pętla w pętli, jednak pytanie czy istnieje jakiś prostszy, bardziej wydajny sposób.

ewentualnie czy da się uzyskać taką informację dając zapytanie do bazy danych(sequelize, mysql), żeby baza jeżeli nie znajdzie wszystkiego to zwracała czego nie znalazła.

zapytanie do bazy danych wygląda tak:

const findPost = await Posts.findAll({
          include: [PostCategory],
          where: {
            id: postsId,
            public: true,
          },
        });

 

2 odpowiedzi

0 głosów
odpowiedź 3 lipca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
edycja 3 lipca 2020 przez Paweł Nąckiewicz

1. Stwórz nowa tablice do której wpiszesz wartości obiektów z array2. Wyłapiesz to za pomoca Object.keys

2. Za pomoc filtra zwróc te elementy z nowej tablicy, ktorych nie ma w array1.

 

Btw jak masz tak prosta strukture to może nawet 1. punkt ominiesz object.values

0 głosów
odpowiedź 3 lipca 2020 przez Comandeer Guru (599,730 p.)

Widzę tutaj zastosowanie dla połączenia map + filter:

  1. Przejeżdżasz map przez array2 i tworzysz tablicę zawierającą same wartości id.
  2. Zapuszczasz filter na array1 i szukasz wartości, których nie ma w array2 (przy pomocy includes).

W sumie na upartego można to machnąć jednym reduce na array2 (hint: wartością początkową niech będzie array1).

komentarz 3 lipca 2020 przez icytower Bywalec (2,110 p.)
no właśnie myślałem o takim czymś i pytanie dotyczyło czy da się jakoś na jednej pętli lub podczas zapytania do bazy danych. z tym reduce pokombinuję, dzięki.
komentarz 3 lipca 2020 przez Tomek Sochacki Ekspert (227,510 p.)
reduce to nie jest moim zdaniem najlepszy kierunek... rozwiązanie z map i filter jest wg mnie łatwiejsze w analizie i czytelniejsze, szczególnie dla innych osób które w przyszłości będą być może coś robiły z tym kodem.
komentarz 3 lipca 2020 przez ScriptyChris Mędrzec (190,190 p.)

Co w reduce jest mniej czytelnego, jeśli callback do niego przekazany będzie zawierać praktycznie te same warunki co przy zastosowaniu filter?

komentarz 3 lipca 2020 przez Comandeer Guru (599,730 p.)
Bo w jego wnętrzu będą działy się dwie osobne rzeczy: mapowanie i filtrowanie. A to powoduje spory narzut kognitywistyczny. Polecam ten wątek na twitterze w tym temacie: https://twitter.com/jaffathecake/status/1213077702300852224
komentarz 6 lipca 2020 przez icytower Bywalec (2,110 p.)
const findedRecords = array1.reduce((acc, cur) => {
              acc.push(cur.id);
              return acc;
            }, []);

zrobiłem to w ten sposób i mam tablicę ze znalezionymi rekordami. ją wysyłam na front. wtedy front może resztę już sam obsłużyć.

komentarz 6 lipca 2020 przez Comandeer Guru (599,730 p.)

Akurat to można o wiele prościej zapisać jako po prostu map:

const foundRecords = array1.map( ( { id } ) => {
	return id;
} );

 

Podobne pytania

+1 głos
0 odpowiedzi 110 wizyt
pytanie zadane 15 lutego 2021 w JavaScript przez Bartx Bywalec (2,120 p.)
0 głosów
0 odpowiedzi 155 wizyt
0 głosów
2 odpowiedzi 94 wizyt
pytanie zadane 24 maja 2020 w JavaScript przez Allen Obywatel (1,010 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...