Vamos a pensar que estamos trabajando en una plataforma que nos puede o no mandar un objeto con ciertas propiedades, y si las manda, hagamos X acción.
Normalmente para validar si hay una propiedad podríamos hacer lo siguiente:
const vieneElValor = objeto?.valor?.loQueNecesitamos || 'valor default';
Entonces podríamos validar si esa propiedad en el objeto llega, pero, ¿qué sucede si hay una propiedad dinámica de la que desconocemos las posibilidades que nos lleguen?
Es decir, podemos ver lo siguiente:
objeto = {
valor: 'algo',
valorDinamico: true,
otroValorQueNoSabiamosQueExistia: {
a: true,
b: 2
}
}
Aquí es donde podemos utilizar Object.keys
lo que retornaría las llaves del objeto en forma de arreglo (array) y entonces podríamos acceder a la propiedad length
(o longitud) para saber cuántos elementos hay y si no hay ninguno, entonces, la función nos retornará 0.
Por ejemplo entonces tendremos el siguiente código:
const objeto = { a: 1, b: false };
const estaVacio = Object.keys(objeto).length === 0;
console.log(estaVacio);
Y si ejecutamos este código, podremos ver que estaVacio
es falso porque tenemos 2 posiciones, si hacemos un console.log
a la variable objeto adentro de Object.key
veríamos lo siguiente:
(2) ['a', 'b']
Así, de esta manera, si un objeto tiene propiedades, tendríamos sus índices.
Si pasamos un arreglo, como por ejemplo:
const objeto2 = [];
Object.keys
igual retornará un vacío. Así que no debemos preocuparnos. A menos que usemos parámetros inválidos como null
undefined
nos tirará un error del tipo Cannot convert X to object
pero incluso números y cadenas de caracteres pueden ser pasados al método.
Por lo que, podrías implementar una lógica tolerante a fallos en un «encajonamiento» donde una función te valide, por ejemplo:
const objetoVacio = objeto => {
try {
return Object.keys(objeto).length === 0;
} catch {
return true;
}
}
console.log(
objetoVacio(1),
objetoVacio(null),
objetoVacio({}),
objetoVacio('hello'),
objetoVacio([]),
objetoVacio({
a: true,
b: 1
}),
objetoVacio([{
a: true
}, {
b: 1
}])
);
De esta manera entonces veríamos en consola:
true, true, true, false, true, false, false
Y no veríamos errores, por lo que funciona y es tolerante a fallos, esperamos te ayude este fragmento de código.