Kako brojati objekte u nizu

Znati kako brzo prelaziti kroz niz i brojati predmete varljivo je jednostavno. length()Metoda će vam prikazati ukupan broj vrijednosti u polju, ali što ako samo želite brojati one vrijednosti na temelju određenih uvjeta?

Na primjer, zamislite da imate niz poput ovog:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ];

A želite brojati samo broj objekata kojima je statuspostavljeno '0'.

Kao i kod gotovo svega u programiranju, postoji nekoliko načina za to. U nastavku ćemo proći kroz nekoliko uobičajenih metoda.

Koristite forpetlju

Vjerojatno najlakši način bio bi deklarirati countervarijablu, provući se kroz niz i ponoviti countersamo ako statusje jednako '0':

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; let counter = 0; for (let i = 0; i < storage.length; i++) { if (storage[i].status === '0') counter++; } console.log(counter); // 6

To biste mogli malo pojednostaviti pomoću for...ofpetlje:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; let counter = 0; for (const obj of storage) { if (obj.status === '0') counter++; } console.log(counter); // 6

Također, mogli biste stvoriti funkciju koja će raditi istu stvar ako imate druge nizove objekata za uvjetno brojanje:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; function statusCounter(inputs) { let counter = 0; for (const input of inputs) { if (input.status === '0') counter += 1; } return counter; } statusCounter(storage); // 6

Koristite metode niza

JavaScript uključuje hrpu korisnih metoda prilikom rada s nizovima. Svaka se može povezati u niz i proslijediti različite parametre za rad tijekom iteriranja kroz elemente u polju.

Dvoje koje ćemo pogledati su filter()i reduce().

filter()

Metoda filtriranja upravo to čini - iterira kroz svaki element u nizu i filtrira sve elemente koji ne ispunjavaju uvjete koje pružate. Zatim vraća novi niz sa svim elementima koji su vratili true na temelju vaših uvjeta.

Na primjer:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; const count = storage.filter(function(item){ if (item.status === 0) { return true; } else { return false; } }); /* [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' } ] */

Sad kad ste filtrirali objekt s status: '1', samo pozovite length()metodu na novom nizu da biste dobili ukupan broj objekata sa status: '1':

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; const count = storage.filter(function(item){ if (item.status === 0) { return true; } else { return false; } }).length; // 6

Ali to se puno može skratiti sintaksom ES6:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; const count = storage.filter(item => item.status === '0').length; // 6

reduce()

Zamislite reduce()metodu poput švicarskog vojnog noža - izuzetno je fleksibilan i omogućuje vam da uzmete niz kao ulaz i pretvorite ga u gotovo sve. Još bolje, poput filter()ove metode vraća novi niz, a izvornik ostaje nepromijenjen.

O tome možete pročitati više reduce()u ovom članku.

U naše svrhe želimo uzeti niz, ispitati njegov sadržaj i proizvesti broj. Evo jednostavnog načina za to:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; const count = storage.reduce((counter, obj) => { if (obj.status === '0') counter += 1 return counter; }, 0); // 6

Možete dodatno pojednostaviti upotrebom sintakse ES6 i ternarnog operatora:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; const count = storage.reduce((counter, obj) => obj.status === '0' ? counter += 1 : counter, 0); // 6

I još malo više pomoću destrukturiranja objekata:

const storage = [ { data: '1', status: '0' }, { data: '2', status: '0' }, { data: '3', status: '0' }, { data: '4', status: '0' }, { data: '5', status: '0' }, { data: '6', status: '0' }, { data: '7', status: '1' }, ]; const count = storage.reduce((counter, { status }) => status === '0' ? counter += 1 : counter, 0); // 6

To je nekoliko načina za prolazak kroz elemente niza i njihovo brojanje uvjetno. Sad izađite i računajte s povjerenjem!