我是JS的新手,并且在使用此特定代码时遇到了一些麻烦。使用switch语句应该是石头,剪刀,剪刀,但是它没有返回绘制值,并且返回了其他错误的值:
function RPS(ch1, ch2){
switch (ch1, ch2){
case ('r' && 'p') || ('p' && 'r'):
return 'p';
break;
case ('r' && 's') || ('s' && 'r'):
return 'r';
break;
case ('p' && 's') || ('s' && 'p'):
return 's';
break;
default:
return 'draw';
}
}
console.log(RPS('s', 's'));
因此,使用“ s”和“ s”进行测试时,我期望使用“ draw”,但它返回“ r”。我做错了什么?
答案 0 :(得分:2)
以下是您的代码错误。
ch1, ch2
将得出ch2
。'r' && 'p'
将始终取值为true
。因为r
和p
都是真实值。您可以按照以下步骤进行操作:
p,q,r
创建一个对象。它们的值将是要在原始代码中检查的两个值的数组。例如p
将具有数组['r','p']
Object.entries
在对象上。并在条目上使用find()
。find()
内,将值ch1
和ch2
依次放入数组[ch1,ch2]
和[ch2,ch1]
every()
检查数组中的任何一个是否等于对象的任何值'draw'
function RPS(ch1, ch2){
const obj = {
p:['r','p'],
r:['r','s'],
q:['p','s']
}
let entry = Object.entries(obj)
.find(([k,v]) =>
[ch1,ch2].every((x,i) => x === v[i]) ||
[ch2,ch1].every((x,i) => x === v[i])
)
return entry ? entry[0] : 'draw';
}
console.log(RPS('s','p'))