Megtévesztõen egyszerű tudni, hogyan lehet gyorsan tömbön átvinni egy tömböt, és megszámolni az objektumokat. A length()
módszer megmondja a tömbben található értékek teljes számát, de mi van akkor, ha ezeket az értékeket csak bizonyos feltételek alapján szeretné megszámolni?
Képzelje el például, hogy van egy ilyen tömbje:
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' }, ];
És csak azt szeretné megszámolni, hogy hány objektum van status
beállítva '0'
.
Mint a programozás szinte minden esetében, ennek számos módja van. Az alábbiakban bemutatunk néhány általános módszert.
Használjon for
hurkot
Valószínűleg a legegyszerűbb módszer egy counter
változó deklarálása , a tömbön keresztüli hurok deklarálása és counter
csak akkor ismétlés, ha status
egyenlő '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
Ezt egy kicsit leegyszerűsítheti egy for...of
hurok használatával:
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
Létrehozhat egy függvényt ugyanarra a célra, ha más objektumtömbök vannak feltételesen megszámlálva:
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
Használjon tömb módszereket
A JavaScript egy csomó hasznos módszert tartalmaz, ha tömbökkel dolgozik. Mindegyik egy tömbhöz lehet láncolva, és különféle paramétereket adhatunk át a munkához, miközben iterálunk a tömb elemein.
A kettő, akit megnézünk, az filter()
és reduce()
.
filter()
A szűrési módszer éppen ezt teszi - végigvezet a tömb minden elemén, és kiszűri az összes olyan elemet, amely nem felel meg az Ön által megadott feltétel (ek) nek. Ezután egy új tömböt ad vissza az összes olyan elemgel, amely az állapotod (ok) alapján igaz lett.
Például:
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' } ] */
Most, hogy kiszűrte az objektumot status: '1'
, hívja length()
meg az új tömb metódusát, hogy megkapja az objektumok teljes számát 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
De ez nagyon rövidíthető az ES6 szintaxissal:
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()
Gondoljon arra a reduce()
módszerre, mint egy svájci kés - rendkívül rugalmas, és lehetővé teszi, hogy egy tömböt bemenetként vegyen, és bármi mássá alakítsa. Még jobb, ha filter()
ez a módszer új tömböt ad vissza, így az eredeti változatlan marad.
Ebben reduce()
a cikkben többet olvashat .
Céljainkhoz el akarunk venni egy tömböt, megvizsgálni annak tartalmát és előállítani egy számot. Ennek egyszerű módja van:
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
Tovább egyszerűsítheti az ES6 szintaxis és a háromszintű operátor használatával:
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
És még egy kicsit többet az objektum roncsolás használatával:
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
Tehát ez néhány módszer arra, hogy átnézzük egy tömb elemeit és feltételesen megszámoljuk őket. Most menj ki, és számolj bizalommal!