Tengo un objeto dentro de un objeto que quiero obtener su longitud. Probé con Object.keys(obj).length
pero muestra la longitud del objeto principal. También quiero obtener la longitud del objeto secundario.
Aquí está el código que probé.
let data = { 'data': { '0x': { 0: { 0: 'test1', 330: 'test2' } } } }; let hideCtrls = false; if(Object.keys(data.data).length == 1){ let objIn = Object.values(data.data); if(Object.values(objIn)[0] == 1) { hideCtrls = true; } else { hideCtrls = false; } }; console.log(hideCtrls);
Quiero verificar la longitud de data
dentro de los datos, si su longitud es 1, quiero verificar la longitud de los valores dentro del primer objeto (en este caso, es 0x
). Si la longitud del objeto secundario también es 1, quiero establecer hideCtrls
en verdadero.
Quiero obtener la longitud de este último objeto 0: { 0: 'test1', 330: 'test2' }
. Aquí tenemos dos pares de valores clave adentro, por lo que debería devolver falso, si solo tiene un par de valores clave, debería devolver verdadero.
NOTA: Las teclas son dinámicas
Object.values
devuelve una matriz. Si desea el objeto secundario, debe indexarlo inmediatamente. En general, puede utilizar estas dos funciones auxiliares. Solo tiene que anidar las veces suficientes para llegar al objeto que le interesa:
let hasOneChild = (x) => Object.keys(x).length === 1; let getOnlyChild = (x) => Object.values(x)[0]; let hideCtrls = false; if(hasOneChild(data.data)){ let x = getOnlyChild(data.data) if(hasOneChild(x)) { let y = getOnlyChild(x); ... } else { ... } };
let data = { data: { '0x': { 0: { 0: 'test1', 330: 'test2' } } } } function hideCtrls(){ if(Object.keys(data['data'][Object.keys(data.data)[0]]['0']).length === 1) return true else return false } console.log(hideCtrls())
La desestructuración al menos le permite evitar la pesadilla de una cadena de acceso computarizada y encadenada. Aquí con una función auxiliar para objectLength
.
const objectLength = (obj) => Object.keys(obj).length; const data = { data: { '0x': { 0: { 0: 'test1', 330: 'test2' } } } } const parent = data.data; const [{ 0: child }] = Object.values(parent); const hideCtrls = (objectLength(parent) === 1 && objectLength(child) === 1); console.log(hideCtrls)