[英]Check array length in object javascript
I have some object like this我有一些这样的 object
const array =
{
"entities": [
{
"annexes": [
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": []
},
{
"buildingUniqueIds": []
},
],
"buildingUniqueIds": []
}
]
}
I need to check if any of those array is empty to return true, is this possible to do in one iteration, here is what I have tried for now, but some does not check array length it always return true even if array is empty:(我需要检查这些数组中的任何一个是否为空以返回 true,这是否可以在一次迭代中完成,这是我现在尝试过的,但有些不检查数组长度它总是返回 true 即使数组为空: (
get haveBuildingUniqueIds(): boolean {
const condition1 = this.array.entities.some(x => x.annexes.some(y => y.buildingUniqueIds.some));
const condition2 = this.array.entities.some(x => x.buildingUniqueIds.some);
return condition1 && condition2;
}
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. some
是正确的方法,但它是一个method ,而不是一个标志,所以你最里面的.some(y => y.buildingUniqueIds.some)
将始终返回true
,因为 method 是一个真值。
Instead, check length
:相反,检查
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
.旁注:如果您愿意,可以使用
.buildingUniqueIds.length
而不是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": [{}] } ] });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.