Entonces, tengo una serie de objetos para iterar, en cada iteración necesito verificar si una clave llamada blocks tiene o no tiene longitud.
Si todas las claves de los blocks están vacías (longitud === 0), entonces necesito hacer una operación; de lo contrario, no lo haga. ¿Consíguelo? Si SÓLO UNA tecla de blocks tiene una length > 0 , se debe evitar la operación.
for (let i = 0; i < blockColumns.length; i++) { if (!blockColumns[i].blocks.length) { // TRIGGER OPERATION } } En el código anterior, el problema es que la operación se activará cuando al menos una tecla de blocks no tenga longitud, lo que no necesito. La operación debe activarse SOLAMENTE cuando todas las claves de los blocks tienen una length === 0 .
Use Array.every() para verificar que cada elemento tenga una longitud de 0 (!0 === verdadero). Si todos los elementos tienen una longitud de 0, cada devolvería true . Si se encuentra un false (es decir, longitud > 0), todos devolverían false inmediatamente.
const allEmpty = blockColumns.every(o => !o.blocks.length) if(allEmpty) doSomething()Esto suena como algo para lo que Array.prototype.every sería útil:
if (blockColumns.every((el) => el?.blocks?.length === 0)) { // Do your operation } He usado el encadenamiento opcional aquí porque no estoy seguro de si puede haber un caso en el que un elemento no tenga una propiedad de blocks , o si esa propiedad puede no tener una propiedad de length . Pero dependiendo de la confianza que pueda tener en su estructura de datos, es posible que no necesite hacer eso.
bueno entonces puedes hacer
x = 0 for (let i = 0; i < blockColumns.length; i++) { if (!blockColumns[i].blocks.length > 0) { x+=1; } } if(x == blockColumns.length){ //do something }esta es una forma muy simple de hacerlo y no creo que sea eficiente en absoluto, pero hace el trabajo por ahora: D