百度面试题:JS脱口秀之鸭子合唱团

274 阅读3分钟

思考

这是一道百度面试题,在动物世界里,国王要招募1000只鸭子组成合唱团,这些鸭子都会发出嘎嘎嘎美妙的音乐,请用代码帮国王招募鸭子合唱团。下面我用JavaScript来解答这个问题,我们一起来看看吧!

image.png

解题思路

首先用const choir=[];创建一个合唱团,创建鸭子对象const duck={},定义duckSing方法,表示鸭子发出嘎嘎嘎的叫声。

//国王要招募1000只鸭子合唱团 嘎嘎嘎的叫
        //const常量
        //赋值语句
        const choir=[];//合唱团 数组也是对象
        //对象字面量
        const duck={
            name:'鸭子',
            duckSing:function(){
                console.log('嘎嘎嘎');
            }
        }         

这时候加入循环就可以招聘到1000只鸭子了。

        for(let i=0;i<1000;i++){
            choir.push(duck);
        }

但这并不是最优解,想想现实生活中的招聘是不是都有要求,给国王招聘合唱团也要有严谨性,我们招聘鸭子合唱团要先在动物世界发招聘要求,说明所有动物都可以参加招聘,但要满足是鸭子并且会嘎嘎嘎叫就可以加入合唱团。

定义joinChior(animal)函数,判断动物是不是鸭子,会不会嘎嘎嘎,如果会就输出恭喜加入合唱团,这时候再加入循环进行封装就是比较严谨的代码了。

        //封装
        //加入合唱团有个流程
        function joinChior(animal){
            //严谨性 加入合唱团的要求
            if(animal && typeof animal.duckSing == 'function'){//健壮性 类型的校验
                choir.push(duck);
            }
            console.log('恭喜'+animal.name+'加入合唱团')
        }
        for(let i=0;i<1000;i++){//优质代码 封装
            joinChior(duck);
        }

问题升级

  • 如果招聘到最后发现动物世界只能招聘到999只会嘎嘎嘎的鸭子,这样合唱团找不到1000只鸭子的时候怎么办?
  • 这时候我们可以利用JS的弱类型的特点,让小鸡去学鸭子叫,只要它也可以嘎嘎嘎地叫,那么小鸡也可以加入合唱团,代码如下:
        const choir=[];//合唱团 数组也是对象
        //对象字面量
        const duck={
            name:'鸭子',
            duckSing:function(){
                console.log('嘎嘎嘎');
            }
        }
        //学外语 学鸭子叫
        const chicken={
            name:'小鸡',
            duckSing:function(){
                console.log('嘎嘎嘎');//定义接口,接口一样,可以互换使用
            }
        }     
        //封装
        //加入合唱团有个流程
        function joinChior(animal){
            //严谨性 加入合唱团的要求
            if(animal && typeof animal.duckSing == 'function'){//健壮性 typeof类型的校验
                choir.push(duck);
            }
            console.log('恭喜'+animal.name+'加入合唱团')
        }
        for(let i=0;i<999;i++){//只有999怎么办
            joinChior(duck);
        }
        console.log('合唱团已有'+choir.length+'位成员');//只有999只鸭子
        joinChior(chicken);//小鸡也加入合唱团
        if(choir.length===1000){
            console.log('报告国王,合唱团招聘完成!')
        }        

image.png

结语

看到最后是不是觉得满脑子都是鸭子嘎嘎嘎的叫声呀,要是有不对的地方希望大佬们可以指正,如果你有更好的解法也可以评论区交流一下鸭!

image.png