我有两个数组如下,
var arr1 = [false, true, false];
var arr2 = [And, Or, null];
现在我用操作员交换来创建这两个数组。
并替换为&& 或者用||
替换这有可能实现吗?
现在我预计结果是
var result = false && true || false;
if(result){
// when result true,
}
else{
// when result false
}
请建议您的回答!!!
答案 0 :(得分:1)
只有当arr1和arr2满足这两个条件时它才会起作用
- arr2应该只有两种类型的'和'和'或'
- arr2的长度应为arr1.length-1
醇>
var arr1 = [false, true, false];
var arr2 = ['And', 'Or', null];
arr2 = arr2.map(val => {
val = val == "And" ? "&&" : val;
val = val == "Or" ? "||" : val;
return val;
})
var resultantArray = arr1.reduce((obj, val, index) => {
obj.push(val);
if (arr2[index] && index < arr1.length - 1)
obj.push(arr2[index]);
return obj
}, []);
var resultantCondition = resultantArray.join(" ");
console.log(resultantCondition);
if (eval(resultantCondition))
console.log(true);
else
console.log(false);
&#13;
答案 1 :(得分:0)
您可以为操作数添加字符串,并使用一个对象来收集所有运算符,并通过获取相同索引的函数来减少数组,并返回函数调用的值。
var fn = { and: (a, b) => a && b, or: (a, b) => a && b, identity: a => a },
operands = [false, true, false],
operators = ['and', 'or', null],
result = operands.reduce((a, b, i) => (fn[operators[i]] || fn.identity)(a, b));
console.log(result);
&#13;