用 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与其他语言的区别之一。

总结

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

相关推荐
IT龟苓膏3 小时前
并发深度解析】硬核手撕 ForkJoinPool + WorkStealing + CompletableFuture 底层源码与大厂面试演练
面试·职场和发展
烬羽3 小时前
后端返回的 JSON 字符串,浏览器怎么"看懂"的?——Ajax 全链路拆解
javascript
半个落月4 小时前
一个新手用 Bun + Axios 调通 DeepSeek API 的实践记录
javascript
不好听6134 小时前
深入理解链表:线性数据结构的另一面
javascript·数据结构
林希_Rachel_傻希希4 小时前
学React治好了我的焦虑症,1小时速通React 前20分钟。
前端·javascript·面试
小林ixn4 小时前
从 Ajax 到异步编程:JSON 序列化、Event Loop 与 XHR 请求完全解析
javascript
丷丩5 小时前
MapLibre GL JS第47课:添加动画图标
javascript·gis·动画·mapbox·maplibre
快乐的哈士奇6 小时前
【Next.js实战①】Gmail API 按柜号检索邮件:OAuth 双 Cookie 与搜索 Fallback
开发语言·javascript·ecmascript
云水一下6 小时前
Vue.js从零到精通系列(五):全局状态管理——Pinia 核心与实践
前端·javascript·vue.js
西安邮电大学6 小时前
分治算法详细讲解
java·后端·其他·算法·面试