牛客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仓库

相关推荐
风骏时光牛马21 小时前
C++开发常见问题与解决方案汇总
前端
zhedream21 小时前
Vue 3 Teleport 报错实录:从 patch 时机到 `defer` 属性
前端·vue.js
雁北向21 小时前
自定义指令 数值输入显示优化 巴飞特 测试
前端·vue.js
研☆香21 小时前
jQuery补充知识点
前端·javascript·jquery
先吃饱再说21 小时前
JavaScript栈和队列:从“冰柜里的雪糕”到“排队打饭”
javascript·数据结构
lichenyang45321 小时前
打车票根卡片 UI 重构:从 Circle 挖洞到 clipShape PathShape,再到 100% 自适应
前端
槑有老呆21 小时前
JavaScript 数组,远不止 [] 那么简单
javascript
傅科摆 _ py21 小时前
AI Ping 平台使用教程
java·前端·人工智能
lichenyang45321 小时前
聊天历史从 Preferences 搬到关系型数据库(RDB):为什么换、怎么换、踩了什么坑
前端
HjhIron21 小时前
从栈到队列,再到链表:前端开发者必知的线性数据结构
前端·javascript