Javascript 使用数组索引变量而不是硬编码值
我有一个下面的方法,我想使用前三行中声明的三个变量,而不是使用for循环检查硬编码值并将其添加到res。我尝试了下面的方法,以便只需更改successStates和failedStates中的值Javascript 使用数组索引变量而不是硬编码值,javascript,arrays,Javascript,Arrays,我有一个下面的方法,我想使用前三行中声明的三个变量,而不是使用for循环检查硬编码值并将其添加到res。我尝试了下面的方法,以便只需更改successStates和failedStates中的值 // if(successStates.find(x => x === filterVal)){ // filter1 = successStates[0]; // filter2 = successStates[1]; // } getJobFil
// 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最初可能不是空的,因为可能有东西被推入了它。现在我看到其中一个分支推两个对象,另一个只推一个。