有什么方法可以使该if-else语句通用化。现在,TruthArray包含从t1到t4的值。我正在寻找一种为任意数量的值t5,t6等创建通用解决方案的方法。我没有得到如何告诉for循环根据真值数组的长度创建越来越多的嵌套if语句的方法。谢谢。 代码说明: 首先,我要检查t1是否为真。如果是这样,那么positionArray中的第一个元素将为“ left”。现在,当t1已经确定为true时,我想检查t2的值。如果t2为true,则将positionArray中的第二个元素设置为“ right”。之后,当t1和t2已经为真时,我想检查t3是否为真,并将positionArray的第三个元素设置为左。然后我在t1,t2,t3都为真时检查t4是否为真,依此类推。因此,positionArray的连续元素将是右,然后是左,然后是右,然后是左,依此类推。 现在,如果t1不正确,那么我想从t2开始相同的过程。如果t1不为真,则位置数组的第一个元素将不确定。如果t1不是true且t2是true,则positionArray的第二个元素设置为'left',并且连续的元素将是right,left,right等。 如果t1和t2都不为真,则过程将从t3开始,依此类推。
var truthArray = [t1, t2, t3, t4];
var positionArray = [];
var i;
if (truthArray[0] === true) {
positionArray[0] = 'left';
if (truthArray[1] === true) {
positionArray[1] = 'right';
if (truthArray[2] === true) {
positionArray[2] = 'left';
if (truthArray[3] === true) {
positionArray[3] = 'right';
}
}
else if (truthArray[3] === true) {
positionArray[3] = 'left';
}
}
else if (truthArray[2] === true) {
positionArray[2] = 'right';
if (truthArray[3] === true) {
positionArray[3] = 'left';
}
}
else if (truthArray[3] === true) {
positionArray[3] = 'right';
}
}
else if (truthArray[1] === true) {
positionArray[1] = 'left';
if (truthArray[2] === true) {
positionArray[2] = 'right';
if (truthArray[3] === true) {
positionArray[3] = 'left';
}
}
else if (truthArray[3] === true) {
positionArray[3] = 'right';
}
}
else if (truthArray[2] === true) {
positionArray[2] = 'left';
if (truthArray[3] === true) {
positionArray[3] = 'right';
}
}
else if (truthArray[3] === true) {
positionArray[3] = 'left';
}
答案 0 :(得分:4)
希望这可能对您有所帮助,如果您遇到任何问题,请告诉我
var truthArray = [false, false, true];
var positionArray = [];
var positionArrayValues = ['left','right'];
var offsetArray = [];
var start = 0, end = truthArray.length;
function traverseFurther(index,positionArrayIndex) {
if(index === end)
return;
if(truthArray[index] === true) {
positionArray[index] = positionArrayValues[positionArrayIndex];
traverseFurther(index + 1, positionArrayIndex === 0 ? 1 : 0);
} else {
traverseFurther(index + 1,positionArrayIndex);
}
}
traverseFurther(start, 0);
答案 1 :(得分:0)
因此,您想遍历truthValues
并构建一个positionArray
,其中如果(truthValue == false)将undefined
添加到positionArray
< strong> else 将'left'
或'right'
添加到positionArray
中,这样'left'
和'right'
总是交替出现吗?
这是您的方法。
//fill truthArray with 10 random boolean values
const truthArray = [];
for (var i = 0; i < 10; i++) {
truthArray.push(Math.random() > 0.5);
}
//calc(truthArray) and map the result (and truthInput) to make it easier to read
const input = truthArray.map(t => t?'T':'F');
const output = calc(truthArray).map(v => {
if (v === 'left') return 'L';
if (v === 'right') return 'R';
if (v === undefined) return '-';
});
//display truthInput and result
console.log('T is true, F is false');
console.log('L is left, R is right, - is undefined');
console.log(input.join());
console.log(output.join());
function calc(truthArray) {
var trueCount = 0;
const result = [];
for (var truthVal of truthArray) {
if (truthVal) {
const position = (trueCount % 2 == 0)
? 'left'
: 'right';
result.push(position);
trueCount++;
} else {
result.push(undefined);
}
}
return result;
}
答案 2 :(得分:0)
您可以映射支票并返回一个切换值或undefined
。
它通过检查元素的值并使用带有对象和值pos
的{{3}}来工作。通过将pos
作为对象的flip-flop来为pos
分配新值来更改此值。
rl = { right: 'left', left: 'right' } pos = 'right'; pos = rl[pos]; // left pos = rl[pos]; // right pos = rl[pos]; // left pos = rl[pos]; // right // and so on ...
如果元素不是property accessor,则undefined
映射到结果集。
var truthArray = [false, true, false, true],
lr = { right: 'left', left: 'right' },
pos = 'right',
positionArray = truthArray.map(b => b ? pos = lr[pos] : undefined);
console.log(positionArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }
要获得其他图案,例如
['left', 'left', 'right', 'right']
您可以增加索引并使用余数运算符对其进行调整,然后向右取一个位偏移的值,该值将值除以2
并返回整数值。
var truthArray = [true, false, true, false, true, false, true, false, true],
lr = ['left', 'right'],
pos = 3,
positionArray = truthArray.map(b => b ? lr[++pos, (pos %= 4) >> 1] : undefined);
console.log(positionArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }