Javascript 对对象数组执行一些检查&;如果哪怕有一个条件匹配,请停止批量请求
我有一个1000个元素的对象数组,其中每个对象具有以下属性: 名称、实体、类型、中、低、高。我必须对整个数组[{},{},…]执行以下检查: (注意:类型可以是“静态”或“动态”) 如果(type==“static”)-->,则检查(mid | | | high | | | low)是否为空或负---->然后执行批量请求 如果(类型==='dynamic')-->,则传递 示例-如果我有800个元素&即使其中1个元素的类型为“static”&任何高、中或低的元素都是负数或空的,那么整个800个元素都不应该发送到后端&而是向用户显示一条消息来更正这1个元素的数据 我尝试了很多逻辑,但都不起作用,下面是我最近尝试的(使用了array.some()):Javascript 对对象数组执行一些检查&;如果哪怕有一个条件匹配,请停止批量请求,javascript,arrays,angular,Javascript,Arrays,Angular,我有一个1000个元素的对象数组,其中每个对象具有以下属性: 名称、实体、类型、中、低、高。我必须对整个数组[{},{},…]执行以下检查: (注意:类型可以是“静态”或“动态”) 如果(type==“static”)-->,则检查(mid | | | high | | | low)是否为空或负---->然后执行批量请求 如果(类型==='dynamic')-->,则传递 示例-如果我有800个元素&即使其中1个元素的类型为“static”&任何高、中或低的元素都是负数或空的,那么整个800个元
从'@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)
);
}