【牛客刷题】前端--JS篇(三)

简介: 【牛客刷题】前端--JS篇(三)

题1:总成绩排名


描述(题目中等) 考点:sort


请补全JavaScript代码,要求将数组参数中的对象以总成绩(包括属性"chinese"、“math”、“english”)从高到低进行排序并返回。


解题思路:


根据题目要求,根据数组参数中的对象属性"chinese"、“math”、"english"之和对数组参数进行排序,核心步骤有:


  1. 对数组参数进行sort排序,sort接受一个函数
  2. 在该函数中声明两个变量,分别用于存储该函数两个对象参数的"chinese"、“math”、"english"属性之和

3.最后根据声明的两个变量值对比将数组进行排序

题解:

const _rank = array => {
  array.sort((left, right) => {
    let lg = left.chinese + left.math + left.english
    let rg = right.chinese + right.math + right.english
    return rg - lg
  })
  return array
}

题2:子字符串频次


描述(题目中等)考点:indexOf、while


请补全JavaScript代码,该函数接受两个参数分别为字符串、子字符串,要求返回子字符串在字符串中出现的频次。


解题思路:


根据题目要求查询第二个参数在第一个参数中出现的频次,核心步骤有:


通过indexOf查找到第二个参数初始index值

设置初始出现频次为0

当index大于-1时进入while循环,出现频次加1,再查找下一个index值

题解:

const _searchStrIndexOf = (str, target) => {
    let index = str.indexOf(target)
    let sum = 0
    while (index > -1) {
        index = str.indexOf(target, index + 1)
        sum++
    }
    return sum
}

题3:数组扁平化


描述(题目中等) 考点:reduce、递归


请补全JavaScript代码,要求将数组参数中的多维数组扩展为一维数组并返回该数组。


注意:数组参数中仅包含数组类型和数字类型


解题思路:


  1. 返回一个数组的reduce方法,该reduce方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值,该函数第一个参数为初始值或计算之后的返回值,第二个参数为当前项的值。
  2. 在reduce接收的函数中返回一个结果的拼接(concat),当当前值数据类型为数组的时候,递归重新调用"flatten"函数,否则将值拼接在结果之后返回

微信图片_20221013124209.png

题解

const _flatten = arr => {
    return arr.reduce((result, item) => {
        return result.concat(Array.isArray(item) ? _flatten(item) : item)
    }, [])
}

题4:判断质数


描述(题目中等) 考点:质数


请补全JavaScript代码,要求在Number对象的原型对象上添加"_isPrime"函数,该函数判断调用的对象是否为一个质数,是则返回true,否则返回false。


解题思路:


  1. 首先在Number对象的原型上添加该函数
  2. 函数中当数字参数小于2时,返回false
  3. 然后进入循环,初始值为2,结束条件为当初始值等于数字参数时,返回true

题解:

Number.prototype._isPrime = function () {
    let number = this.valueOf()
    if(number < 2) return false
    for(let i=2 ; i<=number ; i++) {
        if(i === number) return true
        if(number%i === 0) return false
        if(number%i !== 0) continue
    }
}

题5:判断斐波那契数组(拔高题目)


描述(题目中等)考点:斐波那契数列


请补全JavaScript代码,要求以Boolean的形式返回参数数组是否为斐波那契数列。在数学上,斐波那契数列以如下方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N)


注意:[0,1,1]为最短有效斐波那契数列

解题思路:

  1. 最小有效数组为[0, 1, 1],所以数组长度小于3时,默认为false
  2. 计算关系 array[i] + array[i + 1] = array[i + 2];
  3. 数组循环的边界问题,在快指针到达倒数第二个元素的时候循环就应该结束了。

题解:

const _isFibonacci = array => {
    // 补全代码
    if(array.length < 3) return false;
    let i = 0,
        j = 1;
    while (j < array.length - 1) {
        if (array[j + 1] == array[i] + array[j]) {
            i++;
            j++;
        } else {
            return false;
        }
    }
    return true;
}

微信图片_20221013124418.png

相关文章
|
5天前
|
前端开发 JavaScript 数据安全/隐私保护
前端JS正则校验密码之3种实现方式
这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。
6 1
前端JS正则校验密码之3种实现方式
|
4天前
|
前端开发 JavaScript 程序员
聊聊前端 JavaScript 的扩展运算符 “...“ 的使用场景
聊聊前端 JavaScript 的扩展运算符 “...“ 的使用场景
|
12天前
|
JavaScript 前端开发 API
【前端开发】JS同步与异步调用,Vue2基础知识
本文简要介绍了JavaScript中的同步与异步调用以及Vue2的基础知识。 ### JS同步与异步调用 - **同步调用**:代码按顺序执行,每个任务完成后才执行下一个。 - **异步调用**:允许代码并发执行,不必等待前一个任务完成。 - **回调函数**:传统异步模式,如`setTimeout`。 - **Promise**:解决回调地狱问题,链式调用 `.then()`。 - **async/await**:基于Promise,使异步代码看起来像同步代码。 ### Vue2基础知识 - **核心概念**:指令、实例、组件、模板、数据绑定和生命周期钩子。 - **指令**
37 5
|
11天前
|
前端开发
【前端】校园二手书交易系统javascript+css+html (源码)【独一无二】
【前端】校园二手书交易系统javascript+css+html (源码)【独一无二】
|
4天前
|
前端开发 JavaScript 程序员
前端 JavaScript 的 _ 语法是个什么鬼?
前端 JavaScript 的 _ 语法是个什么鬼?
|
5天前
|
前端开发 JavaScript 开发者
fuse.js前端搜索简单使用的三个案例
通过这三个例子可以看出,Fuse.js 是一个功能丰富、易于实现的前端搜索库。它使开发者能够便捷地实现从基础到高级的搜索功能,无论是简单的列表搜索还是实时的搜索建议,都能够高效、精确地提供给用户所需的信息。
12 0
|
10天前
|
监控 数据可视化 前端开发
【前端】政务服务大数据可视化监控平台(源码+html+css+js)
【前端】政务服务大数据可视化监控平台(源码+html+css+js)
|
1月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
59 2
|
16天前
|
JavaScript 前端开发
JS:一篇文章带你搞懂什么是异步
JS:一篇文章带你搞懂什么是异步
|
1月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
54 4

热门文章

最新文章