gpt4 book ai didi

javascript - 使用开关的功能不返回所需的值

转载 作者:行者123 更新时间:2023-11-29 20:39:27 25 4
gpt4 key购买 nike

我是 JS 的新手,我在处理这段特定代码时遇到了一些问题。它应该是使用 switch 语句的剪刀石头布,但它没有返回 draw 值并且返回了错误的其他值:

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'。我做错了什么?

最佳答案

以下是您的代码错误。

  • switch 语句不能有两个变量。 ch1, ch2 将评估为 ch2
  • 'r' && 'p' 将始终评估为 true。因为 rp 都是真值。

您可以按照以下步骤进行操作:

  • 创建一个以键作为返回值的对象 p,q,r。它们的值将是您要在原始代码中检查的两个值的数组。例如 p 将有数组 ['r','p']
  • 您在对象上Object.entries。并对条目使用 find()
  • find() 中将值 ch1ch2 按两种顺序放入数组中,即 [ch1,ch2][ch2,ch1]
  • 使用 every() 检查数组是否等于对象的任何值
  • 如果是则返回 key 否则返回'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'))

关于javascript - 使用开关的功能不返回所需的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55962762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com