Reputation: 6123
So I have an array of objects to iterate over, on every iteration I need to check if a key named blocks
has or has no length.
If all of the blocks
keys are empty (length === 0) then I need to do an operation, otherwise do not. Get it? If ONNLY ONE blocks
key has a length > 0
then the operation should be avoided.
for (let i = 0; i < blockColumns.length; i++) {
if (!blockColumns[i].blocks.length) {
// TRIGGER OPERATION
}
}
In the code above the problem is that the operation will be trigger when at least one blocks
key has no length, which what I don't need. The operation should be trigger ONLY when all of the blocks
keys have length === 0
.
Upvotes: 0
Views: 82
Reputation: 507
well then you can do
x = 0
for (let i = 0; i < blockColumns.length; i++) {
if (!blockColumns[i].blocks.length > 0) {
x+=1;
}
}
if(x == blockColumns.length){
//do something
}
this is a very simple way of doing it and i don't think that it's efficient at all but it gets the job done for now :D
Upvotes: 1
Reputation: 4049
This sounds like something that Array.prototype.every would be useful for:
if (blockColumns.every((el) => el?.blocks?.length === 0)) {
// Do your operation
}
I've used optional chaining here since I'm not sure if there might be a case where an element doesn't have a blocks
property, or if that property may not have a length
property. But depending on how confident you can be in your data structure, you may not need to do that.
Upvotes: 1
Reputation: 191976
Use Array.every()
to check that every item has a 0 length (!0 === true). If all items have 0 length, the every would return true
. If a false
is encountered (ie length > 0), every would return false
immediately.
const allEmpty = blockColumns.every(o => !o.blocks.length)
if(allEmpty) doSomething()
Upvotes: 2
Reputation: 109
let doOperation = true;
for (let i = 0; i < blockColumns.length; i++) {
if (blockColumns[i].blocks.length > 0) {
doOperation = false
}
}
if (doOperation) {
//Some operation
}
not sure if I follow but would this work?
Upvotes: 0