Soy un principiante en JavaScript y estoy tratando de resolver este problema sin Object.keys() o cualquier expresión regular. Tengo una solución que funciona, pero me pregunto si hay una mejor manera de llamar a la clave del objeto dentro de la matriz mientras sigue en bucle. Si alguien tiene una manera de hacer esto que sea básico, por favor hágamelo saber.
Problema: cree una función llamada keyCount que acepte dos parámetros, una matriz de objetos y una cadena. La función debe devolver un número que es el número de veces que aparece esa clave en la matriz de objetos.
Resultado esperado: countTimesOfKey([{name:"Sharon"}, {name: "Manish"},{lastName: "Terma"}], "name")) // 2
Mi respuesta:
function countTimesOfKey(arr, str) { let count = 0 for (let i in arr){ let test = arr[i] let test2 = test[str] if (test2 !== undefined){ count += 1 } } return count }Puede usar Array.filter para filtrar los elementos de la matriz que tienen str como propiedad (usando Object.hasOwnProperty ), luego devuelva la longitud de la matriz resultante:
function countTimesOfKey(arr, str) { return arr.filter(e => e.hasOwnProperty(str)).length; } console.log(countTimesOfKey([{ name: "Sharon" }, { name: "Manish" }, { lastName: "Terma" }], "name"))Por supuesto, usar Object.keys() y la solución de @Spectric son mucho mejores que la siguiente, solo quería mostrar que podemos 'simplificar' esto aún más.
Podemos usar for...in to
return el contador de resultados const result = countTimesOfKey([{name:"Sharon"}, {name: "Manish"},{lastName: "Terma"}], "name"); console.log(result); function countTimesOfKey(arr, name) { let counter = 0; for (a in arr) { for (let k in arr[a]) { if (k === name) { counter++; } } } return counter; }