使用开关的功能未返回所需值

我是JS的新手,并且在使用此特定代码时遇到了一些麻烦。它应该是使用switch语句的Rock,Paper和Scissors,但是它没有返回绘制值,而是返回了其他错误的值:


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


蛊毒传说
浏览 161回答 1
1回答

泛舟湖上清波郎朗

以下是您的代码错误。switch语句不能有两个变量。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'))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript