如何结合两个数组并替换运算符生成可执行布尔表达式?
当然可以实现!这事儿其实没那么复杂,就是把布尔值和操作符按顺序组合成合法的JS逻辑表达式,然后计算结果就行。下面给你两种解决方案,按需选择:
解决方案一:用
eval快速实现(适合输入完全可控的场景) 如果你的arr1和arr2都是自己定义的、没有外部不可控输入,用eval是最直接的方式:
var arr1 = [false, true, false]; var arr2 = ['And', 'Or', null]; // 注意原问题里的And/Or要写成字符串,否则会触发未定义错误 // 第一步:把操作符映射成JS原生逻辑符,过滤掉null const operators = arr2.map(op => { switch(op) { case 'And': return '&&'; case 'Or': return '||'; default: return null; } }).filter(op => op !== null); // 第二步:拼接成完整的表达式字符串 let expression = ''; arr1.forEach((val, index) => { expression += val; // 只有当存在对应的操作符时才添加 if (operators[index]) { expression += ` ${operators[index]} `; } }); // 第三步:执行表达式并使用结果 var result = eval(expression); if(result){ // 当结果为true时的逻辑 console.log('结果是true'); } else{ // 当结果为false时的逻辑 console.log('结果是false'); }
注意点:
eval虽然方便,但如果你的数组内容来自用户输入或者其他不可信来源,绝对不要用它——恶意代码可能会被执行,带来安全风险。这种情况下推荐下面的手动计算方法。
解决方案二:手动计算表达式(安全无风险)
这种方式不需要拼接字符串,直接按顺序计算逻辑运算,完全避免eval的安全问题:
var arr1 = [false, true, false]; var arr2 = ['And', 'Or', null]; // 先处理操作符,得到有效的逻辑符列表 const operators = arr2.map(op => { if (op === 'And') return '&&'; if (op === 'Or') return '||'; return null; }).filter(op => op !== null); // 初始化结果为第一个布尔值 let result = arr1[0]; // 依次计算每个操作符对应的逻辑运算 for (let i = 0; i < operators.length; i++) { const currentOp = operators[i]; const nextValue = arr1[i + 1]; if (currentOp === '&&') { result = result && nextValue; } else if (currentOp === '||') { result = result || nextValue; } } // 使用计算后的结果 if(result){ // 结果为true时的逻辑 console.log('结果是true'); } else{ // 结果为false时的逻辑 console.log('结果是false'); }
补充说明:
原问题里的And和Or需要是字符串类型(不然JS会把它们当作未定义变量报错),如果你的实际场景中这两个值是其他类型(比如枚举),只需要调整map里的判断条件就可以了。
内容的提问来源于stack exchange,提问作者Gokul Kumar
相关产品推荐
相关产品推荐

