Tengo un "objeto de objetos de matrices" y simplemente necesito obtener el recuento total de elementos en las matrices de "nivel inferior" ... así que con el ejemplo a continuación, necesito devolver 19 (contar elementos a a s ):
var arr={ 'AA': { 'aa': ['a','b'], 'bb': ['c','d'], 'cc': ['e','f'], 'dd': ['g','h'] }, 'BB': { 'ee': ['i','j'], 'ff': ['k','l'] }, 'CC': { 'gg': ['m','n'], 'hh': ['o','p'], 'ii': ['q','r','s'] } };Lo tengo trabajando con esto, pero no es bonito:
var cnt=0; for(var f0 in arr){ for(var f1 in arr[f0]){ cnt+=arr[f0][f1].length; } } Probablemente sea mejor usar el map y reduce , pero no puedo entenderlo. Hay preguntas y respuestas similares (como esta ), pero no pude encontrar una que se ajuste a esta situación.
¡Gracias!
Al usar Object.values para acceder a los valores asociados con cada clave, puede usar una reduce anidada para contar todos los elementos del nivel inferior:
var arr={ 'AA': { 'aa': ['a','b'], 'bb': ['c','d'], 'cc': ['e','f'], 'dd': ['g','h'] }, 'BB': { 'ee': ['i','j'], 'ff': ['k','l'] }, 'CC': { 'gg': ['m','n'], 'hh': ['o','p'], 'ii': ['q','r','s'] } }; const cnt = Object.values(arr) .reduce((c, o) => c + Object.values(o) .reduce((c, a) => c + a.length, 0), 0); console.log(cnt)