Kaip suskaičiuoti objektus masyve

Apgaulingai paprasta žinoti, kaip greitai kartoti masyvą ir suskaičiuoti objektus. Šis length()metodas jums pasakys bendrą masyvo verčių skaičių, bet ką daryti, jei norite tik tas vertes suskaičiuoti pagal tam tikras sąlygas?

Pvz., Įsivaizduokite, kad turite tokį masyvą:

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

Norite suskaičiuoti tik objektų skaičių, statusnustatytą į '0'.

Kaip ir beveik viskas programuojant, yra keletas būdų tai padaryti. Toliau pateiksime keletą bendrų metodų.

Naudokite forkilpą

Tikriausiai lengviausias būdas būtų deklaruoti counterkintamąjį, kilpą per masyvą ir kartoti countertik tuo atveju, jei statusjis lygus '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

Galite tai šiek tiek supaprastinti naudodami for...ofkilpą:

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

Taip pat galite sukurti funkciją, kad atliktumėte tą patį dalyką, jei turite kitų objektų masyvų, kuriuos reikia skaičiuoti sąlygiškai:

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

Naudokite masyvo metodus

„JavaScript“ apima daugybę naudingų metodų dirbant su masyvais. Kiekvienas iš jų gali būti pririštas prie masyvo ir perduoti skirtingus parametrus darbui kartojant masyvo elementus.

Du, kuriuos mes pažvelgsime, yra filter()ir reduce().

filter()

Filtro metodas tai ir daro - jis kartojasi per kiekvieną masyvo elementą ir filtruoja visus elementus, kurie neatitinka jūsų nurodytos sąlygos. Tada jis grąžina naują masyvą su visais elementais, kurie buvo teisingi, atsižvelgiant į jūsų būklę (-es).

Pavyzdžiui:

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

Dabar, kai filtravote objektą naudodami status: '1', tiesiog iškvieskite length()naujo masyvo metodą, kad gautumėte bendrą objektų skaičių 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

Bet tai galima labai sutrumpinti naudojant ES6 sintaksę:

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

Pagalvokite apie reduce()metodą kaip apie Šveicarijos armijos peilį - jis yra labai lankstus ir leidžia jums naudoti masyvą kaip įvestį ir paversti jį beveik viskuo. Dar geriau, pavyzdžiui filter(), šis metodas grąžina naują masyvą, paliekant nepakitusią pradinę.

Apie tai galite daugiau sužinoti reduce()šiame straipsnyje.

Savo tikslams norime paimti masyvą, ištirti jo turinį ir pagaminti skaičių. Štai paprastas būdas tai padaryti:

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

Galite dar labiau supaprastinti naudodami ES6 sintaksę ir trijų komponentų operatorių:

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

Ir dar šiek tiek daugiau, naudojant objektų naikinimą:

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

Taigi tai yra keli būdai pereiti masyvo elementus ir juos sąlygiškai suskaičiuoti. Dabar išeik ten ir pasitikėk savimi!