Kuidas massiivis objekte üles lugeda

Teadmine, kuidas massiivi kaudu kiiresti itereerida ja objekte kokku lugeda, on petlikult lihtne. length()Meetod ütleb teile koguarvust väärtuste massiiv, kuid mis siis, kui tahad ainult loota need väärtused põhinevad teatud tingimustel?

Kujutage näiteks ette, et teil on selline massiiv:

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' }, ];

Ja soovite loendada ainult objektide arvu, mille väärtuseks on statusmääratud '0'.

Nagu peaaegu kõiges programmeerimises, on ka seda mitmel viisil. Allpool tutvume mõne levinuma meetodiga.

Kasutage forsilmust

Tõenäoliselt on kõige lihtsam viis deklareerida countermuutuja, tsükkel läbi massiivi ja korrata counterainult siis, kui see statuson võrdne järgmisega '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

Saate seda for...ofsilmuse abil natuke lihtsustada :

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

Samuti võite luua funktsiooni sama asja tegemiseks, kui teil on muid tingimuslikult loetavaid objektide massiive:

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

Kasutage massiivi meetodeid

Massiividega töötamisel sisaldab JavaScript hulgaliselt kasulikke meetodeid. Igaüks neist võib olla massiivi külge aheldatud ja massiivi elementide kaudu itereerides töötamiseks edastatud erinevad parameetrid.

Need kaks, mida me vaatame, on filter()ja reduce().

filter()

Filtrimeetod teeb just seda - see kordab massiivi kõiki elemente ja filtreerib välja kõik elemendid, mis ei vasta teie esitatud tingimustele. Seejärel tagastab uue massiivi kõigi elementidega, mis vastasid teie tingimuse (te) alusel tõele.

Näiteks:

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' } ] */

Nüüd, kui olete objekti välja filtreerinud status: '1', helistage lihtsalt length()uue massiivi meetodile, et saada objektide koguarv 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

Kuid seda saab ES6 süntaksiga palju lühendada:

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()

Mõelge sellele reduce()meetodile nagu Šveitsi armee nuga - see on äärmiselt paindlik ja võimaldab teil võtta massiivina sisendi ja muuta see peaaegu kõigeks. Veelgi parem, nagu filter()see meetod tagastab uue massiivi, jättes algse muutmata.

reduce()Sellest artiklist saate lugeda lähemalt .

Oma eesmärkidel tahame võtta massiivi, uurida selle sisu ja toota numbri. Siin on lihtne viis seda teha:

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

Võite veelgi lihtsustada, kasutades ES6 süntaksit ja kolmepoolset operaatorit:

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

Ja isegi natuke rohkem, kasutades objekti hävitamist:

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

Nii et need on mõned võimalused massiivi elementide läbimiseks ja nende tingimuslikuks lugemiseks. Nüüd mine välja ja loe enesekindlalt!