some is the right method to use, but it's a method, not a flag, so your innermost .some(y => y.buildingUniqueIds.some) will always return true, because a method is a truthy value.
Instead, check length:
const hasEmpties = array.entities.some(({annexes, buildingUniqueIds}) =>
buildingUniqueIds.length === 0 ||
annexes.some(({buildingUniqueIds}) => buildingUniqueIds.length === 0)
);
Live Example:
function check(label, array) {
const hasEmpties = array.entities.some(({annexes, buildingUniqueIds}) =>
buildingUniqueIds.length === 0 ||
annexes.some(({buildingUniqueIds}) => buildingUniqueIds.length === 0)
);
console.log(label, "=>", hasEmpties);
}
check("all empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": []
},
],
"buildingUniqueIds": []
}
]
});
check("none empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
],
"buildingUniqueIds": [{}]
}
]
});
check("entities.buildingUniqueIds empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
],
"buildingUniqueIds": []
}
]
});
check("entities.annexes.buildingUniqueIds[1] empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": [{}]
},
],
"buildingUniqueIds": [{}]
}
]
});
Side note: If you like, you can use !buildingUniqueIds.length rather than buildingUniqueIds.length === 0.
Or without destructuring if you prefer:
const hasEmpties = array.entities.some(entity =>
entity.buildingUniqueIds.length === 0 ||
entity.annexes.some(annex => annex.buildingUniqueIds.length === 0)
);
Live Example:
function check(label, array) {
const hasEmpties = array.entities.some(entity =>
entity.buildingUniqueIds.length === 0 ||
entity.annexes.some(annex => annex.buildingUniqueIds.length === 0)
);
console.log(label, "=>", hasEmpties);
}
check("all empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": []
},
],
"buildingUniqueIds": []
}
]
});
check("none empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
],
"buildingUniqueIds": [{}]
}
]
});
check("entities.buildingUniqueIds empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": [{}]
},
],
"buildingUniqueIds": []
}
]
});
check("entities.annexes.buildingUniqueIds[1] empty", {
"entities": [
{
"annexes": [
{
"buildingUniqueIds": [{}]
},
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": [{}]
},
],
"buildingUniqueIds": [{}]
}
]
});