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

相关推荐
Myli_ing11 分钟前
HTML的自动定义倒计时,这个配色存一下
前端·javascript·html
dr李四维28 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
I_Am_Me_42 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
雯0609~1 小时前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ1 小时前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z1 小时前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
前端百草阁1 小时前
【TS简单上手,快速入门教程】————适合零基础
javascript·typescript
彭世瑜1 小时前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4041 小时前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish1 小时前
Token刷新机制
前端·javascript·vue.js·typescript·vue