检查条件是否匹配Javascript中数组的任何值

时间:2019-03-26 10:33:13

标签: javascript arrays node.js if-statement

检查条件是否匹配数组中任何值的最佳方法是什么?

例如,如果接收到5xx错误,我想实现重试逻辑。

  var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
    if(res.statusCode ===  500 || res.statusCode ===  501 || res.statusCode ===  502) {
      process.stdout.write('HELLO!!!!!! ');

      }

  }));

理想情况下,我想将所有5xx错误代码放入列表或数组中,然后检查res.status代码是否等于任何5xx错误代码。

用JavaScript做到这一点的最佳方法是什么?我可以没有循环吗?

3 个答案:

答案 0 :(得分:4)

为什么不仅仅检查statusCode是否在500和511之间(看起来是range)?数组过大。

var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
  if(res.statusCode >= 500 && res.statusCode <= 511) {
    process.stdout.write('HELLO!!!!!! ');
  }
}));

答案 1 :(得分:1)

  

理想情况下,我想将所有5xx错误的内容放入列表或   数组,然后检查res.status代码是否等于5xx中的任何一个   错误代码。

您可以将df <- data.frame(id = c(1,2,3,4,5), time = c(11, 22,33,44,55), c = c(1,2,3,5,5), e = c(4,2,5,4,NA)) attr(df$id,"label")<- "label" attr(df$time,"label")<- "label2" attr(df$c,"label")<- "something here" attr(df$e,"label")<- "count of something" str(df) dfwide<- recast(df,id~variable +time, id.var = c("id","time")) for(i in (colnames(df))){ for(x in colnames(dfwide)[(grepl(i, colnames(dfwide)))]) mostattributes(dfwide[[x]]) <- attributes(df[[i]]) } 转换为字符串并检查其是否以5开头

statusCode

或者,您也可以使用对象文字来存储statusCode作为代码和相应的消息

var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
  if (res.statusCode.toString().startsWith('5')) {
    process.stdout.write('HELLO!!!!!! ');

  }
}));

另一种选择是将所有状态代码保存在地图中

let statusCodes = {
  501: 'someMsg for 501',
  502: 'someMsg for 502',
  503: 'someMsg for 503',
}


var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
  if (statusCodes[res.statusCode]) {
    process.stdout.write('HELLO!!!!!! ');

  }
}));

答案 2 :(得分:0)

如果需要与ES5兼容的代码,则可以使用Array#indexOf(返回数组中元素的索引,如果数组中不存在该元素,则返回-1),例如:

var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
    if([500, 501, 502].indexOf(res.statusCode) !== -1) {
        process.stdout.write('HELLO!!!!!! ');
    }
}));

如果可以使用ES7,则可以使用Array#includes

var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
    if([500, 501, 502].includes(res.statusCode)) {
        process.stdout.write('HELLO!!!!!! ');
    }
}));

如果确定不需要检查500s内的任何值,则可以按照“某些性能”建议使用500<= statusCode && statusCode < 600或使用正则表达式:/^5\d{2}$/.test(statusCode)