如何检查数组是否为空以及angular8中foreach内的return值

How to check if array is empty or not and return value inside foreach in angular8

我有以下数据,

我想做的是,我需要在每个对象中检查 values[] array

如果它是空的那么return真,否则如果values[] array有一些记录,它会return假。

我已经为此创建了函数,但它每次都返回错误。

如果这是真的,我想隐藏 table。 Table 是多个而不是单个,所以如果值数组为空,那么只想隐藏特定的 table。

{
  "records": [
    {
      "context": {
        "team": [
          "MYTEAM-Consume-TEAM-SETUP-ADMIN"
        ]
      },
      "values": []
    },
    {
      "context": {
        "team": [
          "TEAM1"
        ]
      },
      "values": [
          {
          "value": "red",
          "label": "dd"
        }
      ]
    },
     {
      "context": {
        "team": [
          "Test"
        ]
      },
      "values": []
    },
  ]
}

代码

hideContextTable(rows) {
    const data = rows;
    if (data.records) {
      data.records.forEach(function (record) {
        if (record.values.length === 0) {
          return true;
        } 
      });
    }
    return false;
  }


deleteAllContextData(data) {
    const tbl = this.hideContextTable(data);
    console.log(tbl,"tbl");
    if (tbl) {
      this.showContextTables = false;
    }
  
  }

只需检查filter函数返回数据的长度。

data = {
  "records": [
    {
      "context": {
        "team": [
          "MYTEAM-Consume-TEAM-SETUP-ADMIN"
        ]
      },
      "values": []
    },
    {
      "context": {
        "team": [
          "TEAM1"
        ]
      },
      "values": [
          {
          "value": "red",
          "label": "dd"
        }
      ]
    },
     {
      "context": {
        "team": [
          "Test"
        ]
      },
      "values": []
    },
  ]
};
function hideContextTable(data) {
  const result = data.records.filter(record => record.values.length);
  const flag = result.length ? true : false;
  console.log(flag)
}

hideContextTable(data);

returnforEach的高阶函数中不会导致流离开hideContextTable函数。您应该使用一个可从该函数外部访问的变量,并在满足条件时设置它,然后 return 该函数末尾的变量。

const rows = {
  "records": [
    {
      "context": {
        "team": [
          "MYTEAM-Consume-TEAM-SETUP-ADMIN"
        ]
      },
      "values": []
    },
    {
      "context": {
        "team": [
          "TEAM1"
        ]
      },
      "values": [
          {
          "value": "red",
          "label": "dd"
        }
      ]
    },
     {
      "context": {
        "team": [
          "Test"
        ]
      },
      "values": []
    },
  ]
}


function hideContextTable(rows) {
    let isEmpty = false;
    const data = rows;
    if (data.records && data.records.values) {
      data.records.forEach(function (record) {
        if (record.values.length === 0) {
          isEmpty = true;
          return;  // this is a higher order function
                   // meaning: it won't leave the context of hideContextTable
        } 
      });
    }
    return isEmpty;
  }


const test = hideContextTable(rows);

console.log(test);