牛客JS题(二十二)数组过滤

news2024/9/30 11:26:01

注释很详细,直接上代码

涉及知识点:

  1. 合理封装
  2. 范围判断函数

题干:
在这里插入图片描述

我的答案

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>

  <body>
    <select name="" id="">
      <option value="0">请选择销量范围</option>
      <option value="1">&lt100</option>
      <option value="2">100~500</option>
      <option value="3">&gt500</option>
    </select>
    <ul>
      <li>牛客logo马克杯</li>
      <li>无盖星空杯</li>
      <li>老式茶杯</li>
      <li>欧式印花杯</li>
    </ul>

    <script>
        /**
         * 这题的封装自我感觉很满意,复用性杠杠的 
         * 两大亮点:
         * 1. priceRange以对象化封装调用函数
         * 2. rangejudgment考虑多种常用区间情况封装函数
         */
      var cups = [
        {
          type: 1,
          price: 100,
          color: "black",
          sales: 60,
          name: "牛客logo马克杯",
        },
        { type: 2, price: 40, color: "blue", sales: 100, name: "无盖星空杯" },
        { type: 4, price: 60, color: "green", sales: 200, name: "老式茶杯" },
        { type: 3, price: 50, color: "green", sales: 600, name: "欧式印花杯" },
      ];
      var select = document.querySelector("select");
      var ul = document.querySelector("ul");
      // 补全代码

      //价格区间判断函数组
      let priceRange = {
        0: (sales) => true,
        1: (sales) => rangejudgment(sales, 0, 100, 0),
        2: (sales) => rangejudgment(sales, 100, 500, 1),
        3: (sales) => rangejudgment(sales, 500, false, 2),
      };


      /**
       * 选项改变事件
       * 为什么不用箭头函数?因为需要this;
       * 为什么需要this?因为判题是直接调用的压根没有点击
       * 当然被我注释的方法也是可以的
       */
      select.onchange = function (e) {
        // let { value } = e.target;
        let value = this.value;
        let newList = cups.filter((item) => priceRange[value](item.sales));
        showList(newList, ul);
      };

      /**
       * 展示列表
       * @param {Array} list -列表
       * @param {HTMLElement} ul -ul元素
       * @returns {void}
       */
      function showList(list, ul) {
        ul.innerHTML = "";
        list.forEach((item) => {
          let li = document.createElement("li");
          li.innerHTML = item.name;
          ul.appendChild(li);
        });
      }

      /**
       * 范围判断
       * @param {number} value -用于比较的数值
       * @param {number|boolean} firstNum -第一个数值(小)-若无限小则为false
       * @param {number|boolean} secondNum -第二个数值(大)-若无限大则为false
       * @param {number} [type=0] -判断类型:0-左闭右开,1-左闭右闭,2-左开右开,3-左开右闭
       * @returns {boolean} -判断结果
       */
      const rangejudgment = (value, firstNum, secondNum, type = 0) => {
        try {
          switch (type) {
            case 0:
              return (
                (firstNum ? value >= firstNum : true) &&
                (secondNum ? value < secondNum : true)
              );
            case 1:
              return (
                (firstNum ? value >= firstNum : true) &&
                (secondNum ? value <= secondNum : true)
              );
            case 2:
              return (
                (firstNum ? value > firstNum : true) &&
                (secondNum ? value < secondNum : true)
              );
            case 3:
              return (
                (firstNum ? value > firstNum : true) &&
                (secondNum ? value <= secondNum : true)
              );
            default:
              throw new Error("type参数错误");
          }
        } catch (e) {
          console.log(e);
          return false;
        }
      };
    </script>
  </body>
</html>

博客更新不是很及时,需要看后面内容的可以看看我的gitee仓库

牛客JS题Gitee仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】C语言期末突击/考研--详解一维数组与字符数组

目录 ​一、一维数组 1.数组的定义 2.一维数组在内存中的存储 二、数组访问越界与数组的传递 1.数组的访问越界 2.数组的传递 三、字符数组与scanf读取字符串 1.字符数组的初始化及传递 2.scanf读取字符串 四、gets函数与puts函数&#xff0c;str系列字符串操作函数 …

「iOS」自定义Modal转场——抽屉视图的实现

「iOS」自定义Modal转场——抽屉视图的实现 文章目录 「iOS」自定义Modal转场——抽屉视图的实现前言错误尝试自定义Modal转场实现流程自定义动画类UIPresentationController 成果展示参考文章 前言 在仿写网易云的过程之中&#xff0c;看到学长之前仿写时实现的抽屉视图&…

Java面试题-集合类

目录 1、请简单介绍下 Java 的集合类吧。 Collection Set TreeSet和HashSet List ArrayList 和 LinkedList 数组和链表的区别 Java 的列表有哪些实现类&#xff1f; Vector Queue Map 能说下 HashMap 的实现原理吗&#xff1f; 能说下 HashMap 的扩容机制吗&#x…

达梦数据库的系统视图v$cachepln

达梦数据库的系统视图v$cachepln 达梦数据库的系统视图V$CACHEPLN的主要作用是提供缓存中SQL执行计划的信息&#xff0c;在 ini 参数 USE_PLN_POOL !0 时才统计。通过查询这个视图&#xff0c;用户可以获取到缓存中的执行计划及其相关信息&#xff0c;如SQL语句文本等。这有助…

JavaScript青少年简明教程:DOM和CSS简介

JavaScript青少年简明教程&#xff1a;DOM和CSS简介 DOM简介 DOM&#xff08;Document Object Model&#xff09;将文档表示为一个树形结构&#xff0c;其中每个节点都是一个对象&#xff0c;每个对象都有其自身的属性和方法。 通过对DOM的操作&#xff0c;开发者可以使用编…

Mojo 不安全指针 详解

该UnsafePointer类型创建对内存中某个位置的间接引用。您可以使用UnsafePointer来动态分配和释放内存,或指向由其他代码分配的内存。您可以使用这些指针编写与低级接口交互的代码,与其他编程语言交互,或构建某些类型的数据结构。但顾名思义,它们本质上是不安全的。例如,当…

各地级市能源消费总量、夜间灯光值数据(2000-2022年)

全国各地级市能源消费总量、夜间灯光值数据&#xff08;2000-2022年&#xff09; 数据年限&#xff1a;2000-2022年 数据格式&#xff1a;excel 数据内容&#xff1a;337个地级市能源消费总量、夜间灯光值数据&#xff0c;包括城市、省份、年份、夜间灯光值&#xff08;总和&am…

子比主题允梦美化插件全开源版本

在其他论坛看到的一款不错的子比美化插件&#xff0c;功能也比较全面&#xff0c;因为插件作者上学没有时间维护&#xff0c;现在开源给大家&#xff0c;插件本站未做测试&#xff0c;需要的朋友自行下载测试&#xff0c;如果有授权的话可以到允梦作者网站进行咨询。需要其他美…

Java高级面试题(二)-- JVM

Jvm虚拟机&#xff0c;运行在操作系统之上&#xff0c;编译执行java代码 1, 面试官&#xff1a;手绘一个类加载过程 补充&#xff1a; 这里的执行硬件 java 调用 c 指令 创建线程 &#xff0c;new thread()->start() 底层代码就是 native start0&#xff08;&#xff09;&…

Golang | Leetcode Golang题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; func maxSubsequence(a []int, k int) (s []int) {for i, v : range a {for len(s) > 0 && len(s)len(a)-1-i > k && v > s[len(s)-1] {s s[:len(s)-1]}if len(s) < k {s append(s, v)}}return }func lexico…

选择文件鼠标右键自定义菜单

注册表路径 计算机\HKEY_CLASSES_ROOT\*\shell 效果 操作 1.定位 winr&#xff0c;输入regedit, 地址栏输入以下路径&#xff0c;并回车。 计算机\HKEY_CLASSES_ROOT\*\shell 2.在shell上右键&#xff0c;新建项 3右键新建字符串值&#xff0c;Icon,Position 4 右键新建c…

设备IP监听工具 | 网工工具

在工作中经常遇到设备IP客户遗忘了&#xff0c;或者销售不知道从哪借来的设备&#xff0c;IP都不知道 导致无法配置设备&#xff0c;普通工控机还有console&#xff0c;服务器就得接显示器接键盘看了 所以用python写了个小工具通过ARP发现设备IP地址&#xff0c;使用前需要安装…

《书生大模型实战营第3期》基础岛 第1关 :书生大模型全链路开源体系

文章大纲 简介更新性能基座模型对话模型 依赖使用案例通过 Transformers 加载通过 ModelScope 加载通过前端网页对话 InternLM 高性能部署推理1百万字超长上下文推理 智能体微调&训练评测标准客观评测长文评估&#xff08;大海捞针&#xff09;数据污染评估智能体评估主观评…

JavaScript基础(29)_事件对象、鼠标移动事件

事件对象 当事件的响应函数被触发时&#xff0c;浏览器每次都会将一个事件对象作为实参传递进响应函数&#xff0c;在事件对象中封装了当前事件相关的一切信息&#xff0c;比如&#xff0c;鼠标的坐标 、键盘哪个键被按下、鼠标滚轮滚动的方向。。。 鼠标移动事件&#xff08…

aspeed2600 GPIO分析与适配ipmitool power status, ipmitool power on/off

1.说明 本节以x86-power-control/src/power_control.cpp为基础&#xff0c;分析整个GPIO的调用流程&#xff0c;实现简单的ipmitool power on/off,ipmitool power status的管理。 1.资源:x86-power-control:https://github.com/openbmc/x86-power-control2.相关文件: meta-ph…

【redis 第八篇章】链表结构

一、数组和链表 1、数组 数组会在内存中开辟一块连续的空间存储数据&#xff0c;这种存储方式有利也有弊端。当获取数据的时候&#xff0c;直接通过下标值就可以获取到对应的元素&#xff0c;时间复杂度为 O(1)。但是如果新增或者删除数据会移动大量的数据&#xff0c;时间复…

AI辅助教育:九章大模型的数学辅导功能解析

1.简介 九章大模型是学而思为学习研发的模型&#xff0c;该模型对于数学做了很多专门的训练&#xff0c;在题目推荐方面做得比较好。 同时&#xff0c;这个模型也能支持上传图片&#xff0c;对图片内容进行分析&#xff0c;然后针对内容进行校对&#xff0c;推荐相识题目。 支…

用于完成个人搜索的反向图像搜索工具

简介&#xff1a; Infringement.report 提供了一个强大的反向图像搜索工具&#xff0c;称为 Raider。这对于网络安全人员和渗透测试人员来说&#xff0c;是一个不可或缺的工具。 主要功能&#xff1a; 反向图像搜索&#xff1a; 该工具允许用户通过图像进行搜索&#xff0c…

Bash Shell 脚本中的循环语句

文章目录 Bash Shell 脚本中的循环语句一、for 循环1.1 列表循环1.2 不带列表循环&#xff08;C 风格的 for 循环&#xff09; 二、案例示例2.1 打印 1-5 的数字2.2 打印 5 次 "hello world"2.3 打印 abcde2.4 输出 0-50 之间的偶数 三、应用技巧3.1 使用花括号和 se…

自注意力和位置编码

一、自注意力 1、给定一个由词元组成的输入序列x1,…,xn&#xff0c; 其中任意xi∈R^d&#xff08;1≤i≤n&#xff09;。 该序列的自注意力输出为一个长度相同的序列 y1,…,yn&#xff0c;其中&#xff1a; 2、自注意力池化层将xi当作key&#xff0c;value&#xff0c;query来…