蓝桥杯 web 猜硬币(筛选、去重)

第一个TODO的思路分析:

我们要提取出字符串1~9的数字,我们首先可以想到正则表达式去解决/也可以用filter方法

步骤一:筛选掉不是1~9的,可以用replace方法(方法1)

               也可以用filter方法(方法2)

步骤二:将字符串转化为数组类型,可以用split(” “)(方法1)

              也可以用扩展运算符...(方法2)

  • 为什么需要转换为数组?
    • 字符串是一个不可变的序列,不能直接对其中的每个字符应用数组方法(如 map 和 filter)。
    • 转换为数组后,可以使用数组的方法对每个字符单独处理。

步骤三:使用map(Number)将字符数组中的每个元素转换为数字

  • 为什么需要转换为数字?
    • 原始字符串中的每个字符是字符串类型(如 "1""2""3" 等),无法直接进行数学比较或计算。
    • 使用 Number 函数将其转换为数字类型后,才能进行后续的过滤操作(例如检查是否在 [1, 9] 范围内)。

答案:

第一个TODO的答案

方法1:正则表达式

return input_values.replace(/\D|0/g,"").split("").map(Number)

举例输入的字符串是 "abc1230xyz456",我们来看整个过程:

  1. replace(/\D|0/g, ""):

    • 原始字符串:"abc1230xyz456"
    • 移除非数字字符和数字 0 后的结果:"123456"
    • \D: 匹配任何非数字字符(\d:匹配任何数字类型)。
    • |: 表示“或”的逻辑运算符。
    • /g: 全局标志,表示替换所有匹配的部分,而不仅仅是第一个匹配项。
  2. .split(""):

    • split() 方法是将字符串按照指定的分隔符分割成数组的常用方法。
    • 原始字符串:"123456"分割成字符数组后的结果:["1", "2", "3", "4", "5", "6"]
  3. .map(Number):

    • 字符数组:["1", "2", "3", "4", "5", "6"]
    • 将字符数组中的每个元素转换为数字:[1, 2, 3, 4, 5, 6]

方法2·:filter方法

return [...input_values].map(Number).filter(x=> 1<=x && x<=9)
  1. [...input_values] 将 input_values 转换为一个数组类型。
  2. .map(Number)将字符数组中的每个元素转换为数字。
  3. .filter(x=> 1<=&&x<9)过滤掉不在 1 到 9 之间的数字。

第二个TODO的答案

思路分析:

首先我们可以想到用set方法去重,接下来我们用循环(当Set中的元素数量少于3时,继续循环,生成一个1到9之间的随机整数添加到Set中),最后将Set转化为数组并返回

// 将 1~9 中三个不重复的随机数放入数组中,并返回这个数组
let randomCoin = () => {
    let set = new Set(); // 创建一个新的 Set 对象,用于存储唯一的随机数。

    while (set.size < 3) { // 当 Set 中的元素数量少于 3 时,继续循环。
        set.add(Math.floor(Math.random() * 9 + 1)); // 生成一个 1 到 9 之间的随机整数,并添加到 Set 中。
    }

    return [...set]; // 将 Set 转换为数组并返回。
};

逐行解释

  1. 函数定义:

    let randomCoin = () => {
    • 定义了一个名为 randomCoin 的箭头函数(匿名函数),该函数没有参数。
  2. 创建 Set 对象:

    let set = new Set();
    • 创建一个新的 Set 对象,用于存储唯一的随机数。
  3. 循环条件:

    while (set.size < 3) {
    • 使用 while 循环,当 Set 中的元素数量少于 3 时,继续执行循环体。
  4. 生成随机数并添加到 Set:

    set.add(Math.floor(Math.random() * 9 + 1));
    • 生成一个 1 到 9 之间的随机整数:
      • Math.random() 生成一个 [0, 1) 范围内的随机浮点数。
      • Math.random() * 9 生成一个 [0, 9) 范围内的随机浮点数。
      • Math.floor(Math.random() * 9 + 1) 生成一个 [1, 9] 范围内的随机整数。
    • 使用 set.add() 方法将生成的随机数添加到 Set 中。由于 Set 只存储唯一值,因此不会添加重复的数字。
    • Math.floor():向下取整,总是返回小于或等于输入值的最大整数。
    • Math.ceil():向上取整,总是返回大于或等于输入值的最小整数。
  5. 结束循环:

    • 当 Set 中的元素数量达到 3 时,循环结束。
  6. 返回数组:

    return [...set];
    • 使用扩展运算符 [...set] 将 Set 转换为数组并返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值