用 JavaScript 敲开大厂之门:实现梦想的关键一步(二)

前言

之前写过一篇用 JavaScript 敲开大厂之门:实现梦想的关键一步(一)

,给大家分享了用JavaScript解答大厂编程题的答题思路和如何写出优质代码的方法。接下来我将继续分享关于用JavaScript解答大厂编程题的方法。

答题

我先举个栗子

复制代码
大胃王吉吉国王想要吃100根香蕉。他先把香蕉都放在竹筐里,等竹筐里有100根香蕉的时候再开始吃。

面对这样的题目我们要怎么做呢?

答题思路

分析题目

吉吉国王、香蕉和竹筐都是对象;吉吉国王通过挑选该水果是不是香蕉再放入竹筐里的这一个动作我们可以用方法实现;证明是否是香蕉这一动作也可以通过方法实现;吃香蕉的动作也同样用方法实现。

javascript 复制代码
//竹筐
const basket = []

//吉吉国王
const king = {
    eatbanana: function () {
        console.log('我要开始吃香蕉了')
    }
}
        
//香蕉
const banana = {
    //证明是香蕉
    bananaSign: function () {
        console.log('我是香蕉');
    }
}

封装思想

吉吉国王将香蕉放入竹筐里的动作是方法,我们可以用抽象的思想将把香蕉放入竹筐封装成一个函数。

我们要怎么在水果中挑选出香蕉呢?

我们可以通过香蕉对象的bananaSign方法去判断是否是香蕉。

javascript 复制代码
//判断是不是香蕉再放入竹筐
function joinbasket(fruit) {
     //如果fruit存在并且有bananaSign方法,就可以认作为是香蕉
     if (fruit && typeof fruit.bananaSign == 'function') {
         basket.push(fruit);
     }
     //判断完是香蕉便放入竹筐
     console.log('放入竹筐');
 }

&&运算符可以避免错误,提高代码健壮性。

我们也可以用封装的思想实现观察竹筐里香蕉数量。

javascript 复制代码
function banananumber() {
            console.log('竹筐里已经有' + basket.length + '根香蕉了');
            if (basket.length === 100) {
                console.log('吉吉国王可以吃香蕉了')
            } else {
                console.log('还没有满100根香蕉,吉吉国王还要等一会才能吃上香蕉')
            }
        }

我们可以使用for循环实现挑选100根香蕉

javascript 复制代码
for (let i = 0; i < 100; i++) {
    joinbasket(banana);
}
banananumber();

这样我们就完成了这个题目。

为什么选择js

首先,js是基于原型式的面向对象。js是弱类型的,不需要什么类型,表现力特别强大。在js中除了简单数据类型一切都是对象。

我用吉吉国王挑香蕉的题目举个栗子。

复制代码
当竹筐里只有99根香蕉,一直找不到最后一根香蕉时,吉吉国王就有些急不可耐了。如果此时找到一个有bananaSign方法的桃子时会发生什么情况?
javascript 复制代码
//竹筐
const basket = []

//吉吉国王
const king = {
    eatbanana: function () {
        console.log('我要开始吃香蕉了')
    }
}

//香蕉
const banana = {
    //证明是香蕉
    bananaSign: function () {
        console.log('我是香蕉');
    }
}

//桃子
const peach = {
    bananaSign: function () {
        console.log('我是香蕉');
    }
}

//判断是不是香蕉再放入竹筐
function joinbasket(fruit) {
    //如果fruit存在并且有bananaSign方法,就可以认作为是香蕉
    if (fruit && typeof fruit.bananaSign == 'function') {
        basket.push(fruit);
    }
    //判断完是香蕉便放入竹筐
    console.log('放入竹筐');
}


function banananumber() {
    console.log('竹筐里已经有' + basket.length + '根香蕉了');
    if (basket.length === 100) {
        console.log('吉吉国王可以吃香蕉了')
    } else {
        console.log('还没有满100根香蕉,吉吉国王还要等一会才能吃上香蕉')
    }
}

for (let i = 0; i < 99; i++) {
    joinbasket(banana);
}
joinbasket(peach);
banananumber();

结果是:

桃子也被认作为香蕉了。这就是js与其他语言的区别之一。

总结

敏锐的逻辑能力+灵活使用对象方法+拥有封装思想+深入的语言能力=拿下大厂编程题

相关推荐
柒.梧.28 分钟前
HTML入门指南:30分钟掌握网页基础
前端·javascript·html
牛客企业服务31 分钟前
AI面试选型策略:9大维度避坑指南
人工智能·面试·职场和发展
智算菩萨1 小时前
实战:高级中文自然语言处理系统的Python设计与实现
前端·javascript·easyui
想用offer打牌2 小时前
虚拟内存与寻址方式解析(面试版)
java·后端·面试·系统架构
幼儿园老大2 小时前
告别代码屎山!UniApp + Vue3 自动化规范:ESLint 9+ 扁平化配置全指南
javascript·vue.js
Liu.7742 小时前
vue3组件之间传输数据
前端·javascript·vue.js
|晴 天|2 小时前
前端闭包:从概念到实战,解锁JavaScript高级技能
开发语言·前端·javascript
努力学算法的蒟蒻2 小时前
day38(12.19)——leetcode面试经典150
算法·leetcode·面试
9号达人3 小时前
支付成功订单却没了?MyBatis连接池的坑我踩了
java·后端·面试
全栈前端老曹3 小时前
【ReactNative】核心组件与 JSX 语法
前端·javascript·react native·react.js·跨平台·jsx·移动端开发