Javascript 使用数组索引变量而不是硬编码值

Javascript 使用数组索引变量而不是硬编码值,javascript,arrays,Javascript,Arrays,我有一个下面的方法,我想使用前三行中声明的三个变量,而不是使用for循环检查硬编码值并将其添加到res。我尝试了下面的方法,以便只需更改successStates和failedStates中的值 // if(successStates.find(x => x === filterVal)){ // filter1 = successStates[0]; // filter2 = successStates[1]; // } getJobFil

我有一个下面的方法,我想使用前三行中声明的三个变量,而不是使用for循环检查硬编码值并将其添加到res。我尝试了下面的方法,以便只需更改successStates和failedStates中的值

//    if(successStates.find(x => x === filterVal)){
//         filter1 = successStates[0];
//         filter2 = successStates[1];
//    } 

getJobFilter() {
  let successStates = ['ACCEPTED_STATE', 'ACTIVE_STATE'];
  let failedStates = ['INACTIVE_STATE'];
  let otherStates = ['UNKNOWN'];
  let res = [];
  let filter =
    JSON.parse(sessionStorage.getItem('cdgFilter') || '{}');
  for (let key in filter) {
    if (key) {
      if (key === 'collection_status') {
        let filterVal: any;
        let filter1, filter2;

        if (filterVal === "SUCCESSFUL") {
          filter1 = 'ACTIVE_STATE';
          filter2 = 'ACCEPTED_STATE';
        } else if (filterVal === "FAILED") {
          filter1 = 'UNKNOWN_STATE';
          filter2 = 'INACTIVE_STATE';
        }
        res.push({
          'field': 'State',
          'value': filter1
        }, {
          'field': 'State',
          'value': filter2
        });
      } else {
        res.push({
          'field': key,
          'value': filter[key].filter
        });
      }
    }
  }
  return res;
}

最简单的方法是使用贴图对象:

const collectionStatusFilters = {
  SUCCESSFUL: ['ACTIVE_STATE', 'ACCEPTED_STATE'],
  FAILED: ['UNKNOWN_STATE', 'INACTIVE_STATE']
}
然后,您可以这样替换if语句:

const filters = collectionStatusFilters[filterVal];
res = res.concat(
  filters.map(filter => ({
    field: 'State',
    value: filter
  }))
);

您在何处设置
filterVal
<代码>let filterVal:任意是无效语法。为什么
failedStates
只有一个元素而不是两个?
UNKNOWN\u STATE
来自哪里?应该是
let failedStates=['UNKNOWN_STATE','INACTIVE_STATE']?在此处使用类型脚本-filterVal?让我们来看看filterVal:任何。未知将被单独处理,可以被视为第三个变量可能是..是
filterVal()
来自
filter[key]
?为什么要使用
res.concat()
res
最初为空,您可以将其设置为
filters.map()
的结果。代码托管在一个循环中,其中一个分支中有一个
res.push
。这只是为了让代码与已有的代码共存。它在两个分支中都有
res.push()
。是的,在其中一个分支中,我将push替换为
res.concat()
。问题是res最初可能不是空的,因为可能有东西被推入了它。现在我看到其中一个分支推两个对象,另一个只推一个。