牛客JS题(八)无重复数组

注释很详细,直接上代码
涉及知识点:

  1. set
  2. 合法性判断
  3. 扩展运算符
  4. 随机函数封装

题干:

我的答案

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script>

      /**
       * 永远不要相信调用你写的函数的人,尤其的这种作为循环条件的,没判断好就有可能进入死循环
       * 所以开局先排除不合理的情况,
       * 已知set自带去重属性,所以我们不需要考虑去重判断,
       * 随机数生成函数比较常见,咱封装一下调用
       * 最后注意需要返回的是数组而不是set,这里使用扩展运算符展开set作为数组再返回
       */
       const getNumberForRange=((start,end)=>{
           //左闭右开
           return Math.floor(Math.random()*(end-start)+start);
       })

       const _getUniqueNums = (start, end, n) => {
         // 补全代码
         if(n<0||end-start+1<n){
           console.log('无效情况');
           return;
         }

         let nums=new Set();
         while(nums.size<n){
           nums.add(getNumberForRange(start,end+1));
         }

         // 这里用数组的扩展运算符将set转为数组
         return [...nums];
       };
       console.log(_getUniqueNums(1, 4, 5));//无效情况
       console.log(_getUniqueNums(1, 10, -5));//无效情况
       console.log(_getUniqueNums(1, 10, 10));//正常返回

    </script>
  </body>
</html>

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

牛客JS题Gitee仓库

相关推荐
灵感__idea11 小时前
Hello 算法:贪心的世界
前端·javascript·算法
GreenTea12 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd14 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌14 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈15 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫15 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝15 小时前
svg图片
前端·css·学习·html·css3
橘子编程15 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇15 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧15 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint