思考
这是一道百度面试题,在动物世界里,国王要招募1000只鸭子组成合唱团,这些鸭子都会发出嘎嘎嘎美妙的音乐,请用代码帮国王招募鸭子合唱团。下面我用JavaScript来解答这个问题,我们一起来看看吧!
解题思路
首先用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('报告国王,合唱团招聘完成!')
}
结语
看到最后是不是觉得满脑子都是鸭子嘎嘎嘎的叫声呀,要是有不对的地方希望大佬们可以指正,如果你有更好的解法也可以评论区交流一下鸭!