简体   繁体   English

检查数组长度 object javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM