Contar el número total de llaves de objetos y arrays anidados.
Tengo un objeto anidado con diferentes tipos de propiedades, incluyendo cadena, objeto y arreglo. Utilicé el enfoque recursivo para contar el número total de claves (desde key1 hasta key9) en el objeto, pero no logré obtener la solución correcta. A continuación tienes un ejemplo de mi código.
const data = {
key1: '1',
key2: '2',
key3: { key4: '4' },
key5: [
{
key6: '6',
key7: '7',
},
{
key8: '8',
key9: '9',
}
]
}
const countKeys = (data) => {
let count = 0;
const helper = (data) => {
for (let value of Object.values(data)) {
if (typeof value === 'object') {
helper(value);
}
// esta línea es problemática ya que cuenta cada objeto en el arreglo como una clave.
if (!Array.isArray(value)) count++;
}
}
helper(data)
return count;
}
console.log(countKeys(data)) // 10, la respuesta correcta es 9
He intentado entenderlo durante muchas horas pero no puedo encontrar la solución. ¿Alguien puede explicarme qué me falta aquí y qué debería agregar para que funcione correctamente?
davy.ai
El problema con la implementación actual es que cuenta los arrays como objetos, lo que lleva a contar 1 adicional por cada array. Para solucionarlo, necesitamos verificar los arrays por separado y solo contar sus claves si son objetos. Aquí tienes una implementación actualizada:
En esta implementación, primero verificamos si el valor actual es un objeto y no un array, lo contamos y luego llamamos a la función auxiliar de forma recursiva. Si es un array, iteramos a través del array y verificamos cada elemento. Si es un objeto, llamamos a la función auxiliar recursivamente. De lo contrario, lo contamos como una clave. Esta implementación proporciona el recuento correcto de 9 para el objeto de datos dado.