Javascript 对对象数组执行一些检查&;如果哪怕有一个条件匹配,请停止批量请求

Javascript 对对象数组执行一些检查&;如果哪怕有一个条件匹配,请停止批量请求,javascript,arrays,angular,Javascript,Arrays,Angular,我有一个1000个元素的对象数组,其中每个对象具有以下属性: 名称、实体、类型、中、低、高。我必须对整个数组[{},{},…]执行以下检查: (注意:类型可以是“静态”或“动态”) 如果(type==“static”)-->,则检查(mid | | | high | | | low)是否为空或负---->然后执行批量请求 如果(类型==='dynamic')-->,则传递 示例-如果我有800个元素&即使其中1个元素的类型为“static”&任何高、中或低的元素都是负数或空的,那么整个800个元

我有一个1000个元素的对象数组,其中每个对象具有以下属性: 名称、实体、类型、中、低、高。我必须对整个数组[{},{},…]执行以下检查:

(注意:类型可以是“静态”或“动态”)

如果(type==“static”)-->,则检查(mid | | | high | | | low)是否为空或负---->然后执行批量请求

如果(类型==='dynamic')-->,则传递

示例-如果我有800个元素&即使其中1个元素的类型为“static”&任何高、中或低的元素都是负数或空的,那么整个800个元素都不应该发送到后端&而是向用户显示一条消息来更正这1个元素的数据

我尝试了很多逻辑,但都不起作用,下面是我最近尝试的(使用了array.some()):

从'@angular/core'导入{Component,OnInit};
/**
*@title按钮种类
*/
@组成部分({
选择器:“按钮类型示例”,
templateUrl:'按钮类型示例.html',
样式URL:['button-types-example.css'],
})
导出类ButtonTypes示例实现了OnInit{
数据=[
{
名称:“alpha.keyword#acre访问评论dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#acre访问评论dev | cpu.usage.limit.pct#avg”,
类型:“静态”,
mid:“-1”,
低:“-3”,
高:“,
},
{
名称:“alpha.keyword#alphasi500 dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#alphasi500 dev | cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
},
{
名称:“alpha.keyword#ams dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#ams dev | cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
},
{
名称:“alpha.keyword#analytics services dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#analytics services dev | cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
},
{
名称:“alpha.keyword#appsec dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#appsec dev | cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
},
{
名称:“alpha.keyword#astroupgrademanager dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#astroupgrademanager dev | cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
},
{
名称:“alpha.keyword#avo室内地图开发| cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#avo室内地图开发| cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
},
{
名称:“alpha.keyword#aware streaming dev | cpu.usage.limit.pct#avg”,
实体:“alpha.keyword#aware streaming dev | cpu.usage.limit.pct#avg”,
类型:“动态”,
年中:“,
低:“,
高:“
}
];
恩戈尼尼特(){
此.exists(此.data);
}
存在(数组:任意[]){
let DO\u BULK\u INSERT=array.some(元素=>{
如果(
元素[“类型”]=“静态”&&
(元素[“中间”]=“”||
元素[“低”]=“”||
元素[“高”]=“”||
元素[“中间”]<0||
元素[“低”]<0||
元素[“高”]<0)
) {
console.log(“element=”,element);
返回false;
}否则{
返回true;
}
});
log(“DO_BULK_INSERT=,DO_BULK_INSERT”);
如果(批量插入){
控制台日志(“DO_BULK_INSERT”);
}否则{
console.log(“不要批量插入”);
}
}
}
const data=[{name:“alpha.keyword#acre access reviews dev | cpu.usage.limit.pct#avg”,实体:“alpha.keyword#acre access reviews dev | cpu.usage.limit.pct#avg”,类型:“static”,中:“1”,低:“3”,高:“2”,};
const mustSend=datas.every({type,high,mid,low})=>type!='static'| |(parseInt(high)>=0&&parseInt(mid)>=0&&parseInt(low)>=0));

log(“必须发送?”,mustSend)查看您的代码,
DO\u BULK\u INSERT
将为真,即使其中一个元素通过了条件。下面应该适合你

exists(array: any[]) {
    let STOP_BULK_INSERT = array.some(element => {
      if (
        element["type"] === "static" &&
        (element["mid"] === "" ||
          element["low"] === "" ||
          element["high"] === "" ||
          element["mid"] < 0 ||
          element["low"] < 0 ||
          element["high"] < 0)
      ) {
        console.log("element = ", element);
        return true;
      } else {
        return false;
      }
    });

    console.log("STOP_BULK_INSERT = ", STOP_BULK_INSERT);
    if (STOP_BULK_INSERT) {
      console.log("STOP BULK INSERT");
    } else {
      console.log("DO NOT STOP_BULK_INSERT");
    }
  }
}
存在(数组:任意[]){
让我们停止\u BULK\u INSERT=array.some(元素=>{
如果(
元素[“类型”]=“静态”&&
(元素[“中间”]=“”||
元素[“低”]=“”||
元素[“高”]=“”||
元素[“中间”]<0||
元素[“低”]<0||
元素[“高”]<0)
) {
console.log(“element=”,element);
返回true;
}否则{
返回false;
}
});
log(“STOP_BULK_INSERT=,STOP_BULK_INSERT”);
如果(停止批量插入){
控制台日志(“停止批量插入”);
}否则{
日志(“不要停止批量插入”);
}
}
}

实际上,它似乎在工作,我知道问题所在,您希望
exists
返回一些内容,但它返回未定义的内容,您没有从
exists
返回任何内容,您应该返回
DO\u BULK\u INSERT
以查看您的解决方案是否工作

让我们谈谈在可读性和类型检查方面您是如何处理的

让我们同意这里有一个类型检查错误,我们正在检查一个元素是负(数字)还是空(字符串)。这在TS方面应该是固定的,但是,如果不是,它应该工作(毕竟是JavaScript)

我想做点什么

function exists(array) {
  function isNegative(x) {
    return x >= 0;
  }

  function isEmptyString(x) {
    return x === '';
  }

  return array.some(element => {
    if (element.type === 'static') {
      return [element.low, element.mid, element.high].some(prop =>
        typeof prop === 'string' ? isEmptyString(prop) : isNegative(prop)
      );
    }
    else {
      return "WHATEVER"
    }
  });
}

不管怎样,您的代码很好,只是不返回任何内容。

这似乎适合我:

下面是我所做的


dataProcessing(data: any) {
    let DO_BULK_INSERT: boolean = false;
    let BAD_KPI_DATA = [];

    BAD_KPI_DATA = this.filterBadKPI(data);

    if (BAD_KPI_DATA.length > 0) {
      DO_BULK_INSERT = false;
      console.log("DO_NOT_BULK_INSERT = ", DO_BULK_INSERT);
    } else {
      DO_BULK_INSERT = true;
      console.log("DO_BULK_INSERT = ", DO_BULK_INSERT);
    }
  }

  filterBadKPI(array: any[]) {
    let filteredArray = array.filter(this.every);
    console.log("filteredArray = ", filteredArray);
    return filteredArray;
  }

  every(element: any) {
    return (
      element["type"] === "static" &&
      (element["mid"] === "" ||
        element["low"] === "" ||
        element["high"] === "" ||
        parseFloat(element["mid"]) < 0 ||
        parseFloat(element["low"]) < 0 ||
        parseFloat(element["high"]) < 0)
    );
  }


数据处理(数据:任意){
let DO_BULK_INSERT:boolean=false;
让坏的KPI_数据=[];
错误的KPI\U数据=此.filterBadKPI(数据);
如果(错误的KPI_DATA.length>0){

dataProcessing(data: any) {
    let DO_BULK_INSERT: boolean = false;
    let BAD_KPI_DATA = [];

    BAD_KPI_DATA = this.filterBadKPI(data);

    if (BAD_KPI_DATA.length > 0) {
      DO_BULK_INSERT = false;
      console.log("DO_NOT_BULK_INSERT = ", DO_BULK_INSERT);
    } else {
      DO_BULK_INSERT = true;
      console.log("DO_BULK_INSERT = ", DO_BULK_INSERT);
    }
  }

  filterBadKPI(array: any[]) {
    let filteredArray = array.filter(this.every);
    console.log("filteredArray = ", filteredArray);
    return filteredArray;
  }

  every(element: any) {
    return (
      element["type"] === "static" &&
      (element["mid"] === "" ||
        element["low"] === "" ||
        element["high"] === "" ||
        parseFloat(element["mid"]) < 0 ||
        parseFloat(element["low"]) < 0 ||
        parseFloat(element["high"]) < 0)
    );
  }