Stack Overflow en español Asked by Santiago Martinez on August 26, 2021
hola buenos días estoy necesitando ayuda para contar items en node js.
Yo recupero un json desde un pagina que es algo así:
[{"ip":"xxx.xxx.xxx.xxx","puerto":"xxxx","gid":"2","active":"2","queryport":"xxxx"},{"ip":"xxx.xxx.xxx.xxx","puerto":"xxxxx","gid":"3","active":"2","queryport":"xxxx"},{"ip":"xxx.xxx.xxx.xxx","puerto":"xxxxx","gid":"2","active":"1","queryport":"xxxx"}]
y en node js tengo un código así.
var obj = {table: []};
var obj = JSON.parse(body);
for(var i = 0; i < obj.length; ++i) {
if (obj[i].gid == "2"){
hago lo que necesito.
}
El tema es que no encuentro la forma de contar los "gid" en este caso habría 2, ya que el otro no es = a 2.
A alguien sabe que metodo se puede implementar para contarlo?
Desde ya muchas gracias.
Puedes usar la función reduce( )
presente en los array:
var obj = JSON.parse(body);
console.log( obj.reduce( function( acu, item ) {
return acu + ( 'gid' in item && item.gid === '2' );
}, 0 ) );
Este ejemplo contaría las apariciones de elementos cuyo gid === 2
.
gid in item
para comprobar que el elemento tiene un campo gid
(porsi).
item.gid === '2'
solo tiene en cuenta los elementos exactamente iguales a '2'
, sin coherción de tipos.
return acu + ( ... )
toda expresión booleana se transforma implícitamente a 0
si es false
o a 1
si es true
, con lo que nos ahorramos código: si no existe, se retorna acu + 0
. Si existe, se retorna acu + 1
.
Correct answer by Trauma on August 26, 2021
puede ser alguno de los siguientes problemas, por cierto recuerda usar identación.
var body = [
{ip:"xxx.xxx.xxx.xxx",puerto:"xxxx",gid:"2",active:"2",queryport:"xxxx"},
{ip:"xxx.xxx.xxx.xxx",puerto:"xxxx",gid:"3",active:"2",queryport:"xxxx"},
{ip:"xxx.xxx.xxx.xxx",puerto:"xxxx",gid:"2",active:"1",queryport:"xxxx"}
]
var obj = {table: []}; // este elemento se vuelve a definir abajo por lo que deja de tener esta forma de objeto cuidado con eso
var obj = body;//obvie el json parse para usar directamente los objetos js, si no funciona el codigo lo mas probable es que aqui sea la falla
//fragmento editado
var counter = {} // aqui almacenas las apariciones de cada gid
for(var i = 0; i < obj.length; i++) { //el for usa post-increment osea i++ envez de ++i para empezar desde el comienzo el array
console.log(counter);//muestra el counter antes de hacer un cambio
if (counter[`${obj[i].gid}`] >= 1) {
counter[`${obj[i].gid}`]++; //añade 1 si el gid existe en counter
} else {
counter[`${obj[i].gid}`] = 1;// si no existe lo inicializa con un valor por defecto en 1
}
console.log(counter);//muestra el counter despues de un cambio
}//cerramos el for
//y para acceder al las veces que aparece es muy simple solo has lo siguiente:
counter['2']
//ejemplo
console.log(counter['2'])
Answered by jglv on August 26, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP