草庐IT

【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 2 期-职业院校组

JBQ.627号 2023-05-14 原文

第一题:【真题练习】凭空消失的TA

题目要求:

我的思路:

该题要求为找到vue页面中内容消失的原因。vue代码结构都是由elmentui写的,所以最先考虑的是elment-ui的js文件有没有被引入,查看index.js页面发现并没有引入elment-ui.js文件只引入了elment-ui的css文件,所以在css下方引入elment-ui的js就解决了。

我的答案:

<script src="./element-ui-2.15.10/index.js"></script>

第二题:【真题练习】用户名片

题目要求:

我的思路:

题目要求卡片和头像水平垂直居中,卡片右侧文字水平居中。观察结构发现,这几个属性都共有一个共用的类名center,且在css属性中没有此类名的任何代码。所以肯定是对此类名进行样式定义。

我的答案:

/* TODO 待补充代码 */
.center{
  position:absolute;
  left: 50%;
  top: 50%;
  //上述代码利用绝对定位将元素垂直水平方向各偏移父元素(position: relative)的50%,这个时候元素还不是居中(因为定位偏移的中心点不在元素的中心上而是在元素的边界上及左上角)
  transform: translate(-50%,-50%);
  //使用transform将元素在水平和垂直的负方向移动自身的50%(使得transform运动的中心点在元素的中心位置)
}

第三题:【真题练习】偷梁换柱

题目要求:

我的思路:

我刚开始就没有注意到题目提示说可以使用Object.defineProperty或proxy解决。然后越看这题越奇怪。所以说一定要认真读题 😭 😭 😭!!!这道题主要是数据劫持的运用,懂这两个方法咋使用那么这道题就会很简单。

我的答案:

方法一:使用Object.defineProperty 解决
Object.defineProperty(obj, prop, descriptor)方法接收三个参数:
1.属性所在的对象2.属性的名字3.一个描述符对象(它可以是数据属性也可以是访问器属性)
数据属性:
configurable:当它设置为true时,则不能通过delete删除属性。
enumerable:当它设置成true时,则不能通过迭代器遍历出这个属性的值。
writable:将它设置成true时,就不能修改该属性的值了。
访问器属性:
get:在读取属性时调用的函数。
set:在写入属性时调用的函数,在里面可以对刚写入的值进行限制。
let i=0
Object.defineProperty(person,'age',{
  get(){
    return i
  },
  set(value){
    //在set里面对数据进行劫持
    if(value<0){
      i=0
    }else if(value<=150){
      i=value
    }else{
      i=150
    }
  }
})
方法二:使用Proxy 解决
在ES6之前,我们常使用Object.defineProperty()方法来进行数据代理从而实现数据的劫持,在ES6之后诞生了一个全新的对象(构造器):Proxy。
基础语法:const proxyTarget = new Proxy(target, handler)
其中 target可以是任何对象,proxy会对这个对象进行包装, handler是一个对象,它的属性提供了某些操作发生时所对应的处理函数(比如说:get(目标文件、被获取的属性名、proxy对象) 用于拦截对象属性的读取操作,set(目标对象、被设置的属性名、新属性值、最初被调用的对象)用于拦截对象属性的修改/设置操作,deleteProperty(目标对象、待删除的属性名)拦截对象属性的删除操作)。
person=new Proxy(person,{
  //set拦截对象属性设置修改操作
  set(target,property,value){
    if (property === "age" && value<0){
      target.age=0
    }else if(property === "age" && value<=150){
      target.age=value
    }else{
      target.age=150
    }
  }
})

第四题:【真题练习】大电影

题目要求:

我的思路:

这道题主要考察的是jquery的基础语法的使用。根据上面最终效果图的展示,我的 基本思路是:
当点击的是空心爱心时:
①出现成功的弹窗
②成功的弹窗两秒后自动消失
③成功的弹窗还可以通过点击右上角的×号消失
④空心爱心图标变成实心的爱心图标
当点击的是实心爱心时:
①实心的爱心图标转变成空心的爱心图标

我的答案:

// TODO:待补充代码
      $('.card-body-option-favorite').each((index,item)=>{
        $(item).click(function(){
          if($(this).children().attr('src')==="./images/hollow.svg"){
             //替换图标
             $(this).children().attr('src','./images/solid.svg')
            //出现成功的弹窗
            $('#toast__container').attr('style','display:block')
            // 两秒后自动关闭
            setTimeout(function(){
              $('#toast__container').attr('style','display:none')
            },2000)
            //点击×关闭
            $('.toast__close').click(function(){
              $('#toast__container').attr('style','display:none')
            })
          }else{
            $(this).children().attr('src','./images/hollow.svg')
          }
        })
      })

第五题:【真题练习】粒粒皆辛苦

题目要求:

我的思路:

这道题首先使用axios调用接口,拿到接口里面的值。然后再对值进行处理,查看之前图表的上的值,它的结构是:

而数据返回给我们的是这样的:

所以我们要将数据返给我们的值转换成与结构中是一样的,这样方便后面赋值,重构图表。

我的答案:

 // TODO: 待补充代码
      axios.get('./data.json').then(res=>{
        const {data}=res.data
        //处理数据
        const newdata=[["全部"],["小麦"],["大豆"],["马铃薯"],["玉米"]]
        for(key in data){
          newdata[0].push(key)
          for(value in data[key]){
            if(value==='wheat'){
              newdata[1].push(data[key][value])
            }
            if(value==='soybean'){
              newdata[2].push(data[key][value])
            }
            if(value==='potato'){
              newdata[3].push(data[key][value])
            }
            if(value==='corn'){
              newdata[4].push(data[key][value])
            }
          }
        }
        option.dataset.source=newdata;
        myChart.setOption(option);
      })

第六题:【真题练习】618 活动

题目要求:

效果图:

我的思路:

页面布局的题目是必出的,同时也是花费时间较久的一道题。要勤于练习,这里我就不放代码了。

第七题:【真题练习】绝美宋词

题目要求:

最终效果:

我的思路:

①首先调接口拿到诗有关的数据
②先将诗动态展示到页面中,由于最后要高亮显示,高亮显示的主要方法是使用 <span class="highlight"></span> 标签包裹关键词。所以我们只能使用v-html结合v-for来动态展示,因为v-html可以解析html代码。
③为输入框双向绑定一个值用于获取关键词,再为它绑定@input事件,每输入一次就运行一次,如果key不为空那么就查找诗里是否存在关键字,有则放到一个新数组里,记得替换v-for里的数组为新数组。每次进来这个函数的时候先将新数组置空。
④高亮匹配。为v-html绑定函数并传入数据,使用正则表达式,如果找到有包含关键字的诗那么通过replaceAll替换掉里面的关键字。如果不是就直接返回原来的值。

我的答案:

<body>
  <div id="app">
    <h1 style="text-align: center">输入关键字,找一首词</h1>
    <!-- TODO:待补充代码 -->
    <div class="search-form">
      <input @input="changearr" type="text" id="search" class="search" v-model="key" placeholder="词牌名 词句 词人"/>
      <ul class="suggestions">
        <!-- 每一首完整词句用一个 li 包裹 -->
        <li v-for="(item,index) in newarr" :key="index">
          <span class="poet" v-html=handle(item.poetry_content)></span>
          <span class="title" v-html=handle(`${item.title}-${item.author}`)></span>
        </li>
      </ul>
    </div>
  </div>
  <script>
    let vm = new Vue({
      el:'#app',
      // TODO:待补充代码
      data(){
        return{
          arr:[],
          key:"",
          newarr:[]
        }
      },
      created(){
        axios.get('./data.json').then((res)=>{
          if(res.status===200){
            this.arr=res.data
          }
        })
      },
      methods:{
        changearr(){
          this.newarr=[]
          // 如果关键词不为空
          if(this.key){
            this.arr.forEach(element => {
              if(element.poetry_content.includes(this.key) || element.title.includes(this.key) || element.author.includes(this.key)){
                this.newarr.push(element)
              }
            });
          }
        },
        handle(str){
          console.log(str)
          var reg=new RegExp(this.key,'g')
          if(reg.test(str)){
            return str.replaceAll(this.key,`<span class="highlight">${this.key}</span>`)
            console.log(111)
          }else{
            return str
          }
        }
      }
    })
  </script>
</bod

第八题:【真题练习】乾坤大挪移心法

题目要求:

我的思路:

刚看到这道题的属实有点呆着了,因为它调用函数的方式很神奇,很少遇到这样的。前几天刚好在某个视频里看到过...args这种写法,专门用于参数不确定的时候用的。

方法一:

简便写法,因为它最后一次调用不传参。所以说明最后一次args的长度为0,如果没长度就返回 '战胜峨眉,武当,少林'(因为最后输出值都是一样的所以这么写也没问题),有就继续调用函数mentalMethod。
function mentalMethod(...args) {
    // TODO 待补充代码
    if(args.length){
        return mentalMethod
    }else{
        return '战胜峨眉,武当,少林'
    }
}

方法二:

用闭包,说白了就是函数的内部子函数,能够读取其他函数内部变量的函数。它可以引用函数外部的变量,这是解这道题的关键。
function mentalMethod(...args) {
    // TODO 待补充代码 
    var a=""
    a+=args.join(',')
    let fn=function (...args){
        if(args.length>0){
            a+=','+args.join(',')
            return fn
        }else{
            return '战胜'+a
        }
    }
    return fn
}

第九题:【真题练习】不能说的秘密

题目要求:

最终效果演示:

我的思路:

这道题有一个很细节的地方就是你选择的条件必须在密码中出现,下午找了很久没发现啥错误但是就是不通过结果发现还有如下的情况出现。假如我选择了包含大写和包含小写,因为是随机出来的,有可能出现只包含大写或者只包含小写的情况出现。(我思维还是不够严谨 😭 😭 😭)
所以我们点击某个条件时先在它内部进行一次随机取值,这样就可以保证最后输出一定会一个满足此条件的。虽然成功了,但是总觉得哪里还不太完美。
十进制ASCII码转换成字符:String.fromCodePoint(num1[, ...[, numN]])方法

我的答案:

function generatePassword(lower, upper, number, symbol, length) {
  //TODO:待补充代码
  let key=[]
  let keys=[]
  password=[]
  function per(key){
    keys.push(...key)
    password.push(key[Math.floor(Math.random()*key.length)])
  }
  if(lower){
    let key=[]
    for(var i=0;i<26;i++){
      key.push(String.fromCodePoint(97+i))//产生'a-z'的26个字母
    }
    per(key)//单独进行一次随机取值
  }
  if(upper){
    let key=[]
    for(var i=0;i<26;i++){
      key.push(String.fromCodePoint(65+i))//产生'A-Z'的26个字母
    }
    per(key)
  }
  if(number){
    let key=[]
    for(var i=0;i<10;i++){
      key.push(i)//产生数字'0-9'
    }
    per(key)
  }
  if(symbol){
    let a=['!','@','#','$','%','^','&','*','(',')','{','}','[',']','=','<','>','/',',','.']
    key.push(...a)
    per(key)
  }
  var length1=password.length
 for(var i=0;i<(length-length1);i++){
  password.push(keys[Math.floor(Math.random()*keys.length)])
 }

 return password.join('')
}

第十题:【真题练习】收快递了

题目要求:

我的思路:

就是找你输入的地名是否存在,如果存在那么就将当前地面先存到数组中。如果不存在就继续往里层找,最后判断数组是否为空,为空表示没找到值就返回一个null,有就返回数组。
我写的时候为了偷懒第一层我就直接写了if(regions[0].name===regionName)……因为我看传进来的数据第一层就一个,也检测过了没有问题,然后就死后通不过,真的有点搞不明白这个检测的了。
最后看别人是 regions.forEach(el=>{……}写的然后我改完之后就通过了………………。还是要写的严谨些的好!!!

我的答案:

function findRegion(regions, regionName) {
  // TODO: 在这里写入具体的实现逻辑
  // 需要从树状结构的行政信息中,遍历找到目标区域的行政信息,如输入:成都市,返回 [四川省,成都市]
  // 如果所输入的位置信息不存在,则返回 null
  var address=[]
  regions.forEach(el=>{
    if(el.name===regionName){
      address.push(regionName)
    }else{
      el.children.forEach(element => {
        if(element.name===regionName){
          address.push(regions[0].name)
          address.push(regionName)
        }else{
          element.children.forEach(ele=>{
            if(ele.name===regionName){
              address.push(regions[0].name)
              address.push(element.name)
              address.push(regionName)
            }
          })
        }
      });
    }
  })
  return address.length===0?null:address
}

module.exports = findRegion; // 检测需要,请勿删除

⭐结语

以上是我这几天做下来的第十四届蓝桥杯(Web 应用开发)模拟赛 2 期-职业院校组的所有内容了,我也是还在前端之路摸爬滚打的小白,有哪里写的不严谨的地方,请各位大佬帮忙留言指正。 还有24天就要比赛了!!!最后祝各位在蓝桥杯中取得满意的成绩 💓 💓 💓 !!!

有关【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 2 期-职业院校组的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  6. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  9. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  10. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

随机推荐