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

总结

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

相关推荐
zk_one39 分钟前
【无标题】
开发语言·前端·javascript
胖咕噜的稞达鸭1 小时前
C++技术岗面试经验总结
开发语言·网络·c++·网络协议·tcp/ip·面试
AIBox3652 小时前
openclaw api 配置排查与接入指南:网关启动、配置文件和模型接入全流程
javascript·人工智能·gpt
precious。。。2 小时前
1.2.1 三角不等式演示
前端·javascript·html
阿珊和她的猫2 小时前
TypeScript 中的 `extends` 条件类型:定义与应用
javascript·typescript·状态模式
众创岛2 小时前
iframe的属性获取
开发语言·javascript·ecmascript
echome8883 小时前
JavaScript Promise 与 async/await 实战:5 个高频异步编程场景的优雅解决方案
开发语言·javascript·ecmascript
独角鲸网络安全实验室4 小时前
Java常见面试题及答案汇总(2025最新版)
java·安全·面试·面试题·考试·考试题·面试攻略
摸鱼仙人~4 小时前
Math.js 使用教程
开发语言·javascript·ecmascript
胖咕噜的稞达鸭5 小时前
总结面试经验TCP和UDP的区别,TCP慢启动机制,拥塞控制,Linux指令,DNS的理解,TLS握手流程
tcp/ip·面试·udp