【牛客前端刷题】JS拔高篇

简介: 【牛客前端刷题】JS拔高篇

题1:Symbol


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


请补全JavaScript代码,要求以键/值对的对象形式返回参数数组。要求如下:

  1. 键名的数据类型为Symbol
  2. 键值为当前数组项
  3. Symbol的描述为当前数组项
  4. 返回普通对象


解题思路:

将数组参数转换为键/值对的形式返回,键名为Symbol且描述为键值,核心步骤有:

  1. 生成空对象
  2. 遍历数组
  3. 生成Symbol实例,初始化时将数组的该项带入
  4. 设置对象键名、键值

 5.返回对象

题解

const _symbolKey = array => {
    let object = {}
    for(item of array) {
        let key = Symbol(item)
        object[key] = item
    }
    return object
}

题2:相同的Set


描述(题目中等) 考点:扩展字符、遍历、size、has

请补全JavaScript代码,要求以boolean的形式返回两个Set对象参数是否一样,是则返回true,否则返回false。

解题思路:


根据题目要求判断两个Set参数是否是一样的,核心步骤有:

  1. 通过size判断两个set对象的长度是否一致,不一致直接返回false
  2. 通过ES6[…]扩展字符将set对象的伪数组转换为数组再调用every进而判断该数组中的每一项是否存在于另一个set对象中

题解:

const _isSameSet = (s1, s2) => {
    if (s1.size !== s2.size) {
        return false
    }
    return [...s1].every(i => s2.has(i))
}

题3:Getter


描述(题目中等)考点:class类、getter


请补全JavaScript代码,完成名为"Rectangle"的矩形类。要求如下:

  1. 构造函数只包含两个参数,依次为"height"、“width”
  2. 设置Getter,当获取该对象的"area"属性时,返回该对象"height"与"width"属性的乘积

微信图片_20221013125549.png

解题思路:


根据题目要求,当通过“Rectangle”类创建一个实例的时候,调用该实例的“area”属性返回矩形的面积,核心步骤有:


  1. 构造函数中需要两个参数分别为“width”和“height”
  2. 可以选择创建一个返回“width”与“height”乘积的方法
  3. 对“area”函数使用“get”计算,该函数返回第二步的方法

题解:

class Rectangle {
    constructor(height, width) {
        this.height = height
        this.width = width
    }
    get area() {
        return this.calcArea()
    }
    calcArea() {
        return this.height * this.width
    }
}

题4:Map保存节点


描述(题目中等)考点:选择器、Map

请补全JavaScript代码,要求将页面中的"p"标签以键名的形式保存在Map对象中,键名所对应的键值为该"p"标签的文字内容。


解题思路:


根据题目要求,将页面中的“p”标签DOM节点保存在Map对象的键名中,其内容保存在键值中,核心步骤有:

  1. 通过document.querySelector获取页面中“p”元素标签
  2. 初始化Map实例保存“p”标签DOM节点和内容

题解:

const _elementKey = () => {
    let p = document.querySelector('p')
    return new Map([[p,p.innerText]])
}

题5:控制动画(较难题目)


描述(题目中等)考点:动画、元素获取、range、改变事件

请补全代码,要求当滑动id为"range"的滑块控件时可以改变id为"rect"的矩形旋转速度。要求如下:


  1. id为"rect"的矩形初始动画周期为10秒
  2. id为"range"的滑块控件默认值为1、最小值为、最大值为10、滑动间隔为1
  3. 当滑动滑块值为1时,矩形动画周期为10秒、当…,为…、当滑动滑块值为10时,矩形动画周期为1秒


注意:


必须使用DOM0级标准事件(onchange)


解题思路:

根据题目要求,滑动滑块需要改变动画的旋转速率,核心步骤有:

  1. 首先设置id为”rect“矩形的动画属性
  2. 补全id为”range’“的滑动框
  3. 获取到id为”range“的滑动框并添加改变事件并且在改变事件中修改id为”rect“的矩形动画周期事件

题解:

<!DOCTYPE html>
<html>
<head>
  <meta charset=utf-8>
  <style type="text/css">
    #rect {
      width: 120px;
      height: 100px;
      background-color: black;
      animation: rect 10s linear infinite;
    }
    @keyframes rect {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
  </style>
</head>
<body>
  <!-- 补全代码 -->
  <div id="rect"></div>
  <input
    id="range"
    type="range"
    step="1"
    defaultValue="1"
    value="1"
    min="1"
    max="10"
  >
  <script type="text/javascript">
    // 补全代码
    document.querySelector('#range').onchange = function () {
      let speed = document.querySelector('#range').value
      document.querySelector('#rect').style.animationDuration = 11 - speed + 's'
    }
  </script>
</body>
</html>

效果:微信图片_20221013125920.gif

相关文章
|
3天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
5天前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
19 4
|
15天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
15天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
24 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
20天前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
28 1
|
20天前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
17 1
|
23天前
|
前端开发 JavaScript UED
"前端小技巧大揭秘:JS如何将后台时间戳秒变亲切小时前、分钟前,让用户秒懂,提升互动体验!"
【10月更文挑战第23天】在Web开发中,将后台返回的时间戳转换为“小时前”、“分钟前”、“刚刚”等友好的时间描述是常见需求。本文介绍如何用JavaScript实现这一功能,通过计算当前时间和时间戳的差值,返回相应的描述,提升用户体验。
26 1
|
30天前
|
前端开发 JavaScript 安全
JavaScript前端开发技术
JavaScript(简称JS)是一种广泛使用的脚本语言,特别在前端开发领域,它几乎成为了网页开发的标配。从简单的表单验证到复杂的单页应用(SPA),JavaScript都扮演着不可或缺的角色。
20 3
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
97 2
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
124 4
下一篇
无影云桌面