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

总结

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

相关推荐
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
晨米酱2 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄2 天前
JavaScript 隐式全局变量解析
javascript
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
沙蒿同学2 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
CoderYanger2 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
paopaokaka_luck2 天前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
爱学习的执念2 天前
助力金九银十1000道软件测试面试题(功能、接口、自动化、WEB、APP.......)附答案
软件测试·面试
小的~~2 天前
银河麒麟V10 ARM部署TDengine(涛思)工业时序数据库安装与测试
面试·程序员创富