有个需求需要定义一个返回状态的方法,这个方法的逻辑就是传入一个数值,根据这个数值所在范围返回不同的状态,问题就出在方法中的各个范围都是动态的。最后就是需要根据一个数组对象循环遍历得到一个if条件的字符串然后执行字符串返回状态。
let "ColorRanges" = [
{"start": "0", "end": "50", "sinclusion": "T", "einclusion": "T", "state": "normal" },
{ "start": "50", "end": "80", "sinclusion": "F", "einclusion": "T", "state": "warning" },
{ "start": "80", "end": "100", "sinclusion": "F", "einclusion": "T", "state": "error" },
]
function getState (val){
let nval = Number(val)
let condition = ''
let state = 'normal'
ColorRanges.forEach((item,index,arrary)=>{
if(item.sinclusion == 'T' && item.einclusion == 'T'){
condition += `if(nval>=${Number(item.start)}&&nval<=${Number(item.end)}){state = '${item.state}'} `
}else if(item.sinclusion == 'T' && item.einclusion == 'F'){
condition += `if(nval>=${Number(item.start)}&&nval<${Number(item.end)}){state = '${item.state}'} `
}else if(item.sinclusion == 'F' && item.einclusion == 'F'){
condition += `if(nval>${Number(item.start)}&&nval<${Number(item.end)}){state = '${item.state}'} `
}else if(item.sinclusion == 'F' && item.einclusion == 'T'){
condition += `if(nval>=${Number(item.start)}&&nval<=${Number(item.end)}){state = '${item.state}'} `
}
})
eval(condition)
return state
},
//执行一下
console.log(getState('70')) //后台输出'warning'
知识点:eval()的使用
- 可以使用
eval()
方法执行生成的字符串,让其生效。例如,假设我们已经生成了以下的 if 条件语句字符串:
const ifStatement = `
if (a === b) {
console.log('a 等于 b');
} else if (a > 0) {
console.log('a 大于 0');
} else if (b < 0) {
console.log('b 小于 0');
}
`;
我们可以通过 eval()
方法执行该字符串:
eval(ifStatement);
- eval()` 方法不能返回值。因此需要使用一个变量来保存返回值。例如:
const nval = 70; // 假设 nval 的值为 70
let result; // 定义一个变量来保存返回值
const ifStatement = `
if (nval >= 0 && nval <= 50) {
result = 'normal';
} else if (nval >= 50 && nval <= 80) {
result = 'warning';
} else if (nval >= 80 && nval <= 100) {
result = 'error';
}
`;
eval(ifStatement); // 执行 if 条件语句
console.log(result); // 输出 'warning'
在上述代码中,我们定义了一个变量 result
来保存返回值。最后执行生成的 if 条件语句字符串,并将返回值保存在 result
变量中。最后输出 result
变量的值。
需要注意的是,使用 eval()
方法存在一定的安全风险,因为它可以执行任意的 JavaScript 代码。建议在使用时谨慎考虑,确保执行的字符串是可信的。