题解 | #数组过滤#

数组过滤

https://www.nowcoder.com/practice/46d607f9bf64458daa8798339a7336d0

我想从封装的角度完成这道题,只需给一个范围值 筛选即可。有没有更好的方法。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <select name="" id="">
            <option value="0">请选择销量范围</option>
            <option value="1"><100</option>
            <option value="2">100~500</option>
            <option value="3">>500</option>
        </select>
        <ul>
            <li>牛客logo马克杯</li>
            <li>无盖星空杯</li>
            <li>老式茶杯</li>
            <li>欧式印花杯</li>
        </ul>

        <script>
            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');

            select.onchange = (e) => {
              const index = select.value
              const currentCup = cups
              let newCups = []

              switch(index) {
                case '1': 
                  newCups = filterCup(0, 100)
                  break
                case '2': 
                  newCups = filterCup(100, 500, true)
                  break
                case '3': 
                  newCups = filterCup(500, '')
                  break
                default:
                  newCups = cups
              }

              // 渲染
              let s = ``
              for (const item of newCups) {
                s += `<li>${item.name}</li>`
              }
              ul.innerHTML = s
            }

            function filterCup(min, max, contain) { // contain是否个范围值  包含自身
              if (contain) {
                min --
                max ++
              }
              return cups.filter(c => max ? (c.sales > min && c.sales < max) : c.sales > min)
            }
        </script>
    </body>
</html>

全部评论
封装思路很好,减少了代码的冗余
点赞 回复 分享
发布于 2023-06-02 10:42 云南
这个筛选方式很不错,提高了代码的复用性
点赞 回复 分享
发布于 2023-06-02 10:42 广东

相关推荐

不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务