第一个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"
,我们来看整个过程:
-
replace(/\D|0/g, "")
:- 原始字符串:
"abc1230xyz456"
- 移除非数字字符和数字
0
后的结果:"123456"
\D
: 匹配任何非数字字符(\d:匹配任何数字类型)。|
: 表示“或”的逻辑运算符。/g
: 全局标志,表示替换所有匹配的部分,而不仅仅是第一个匹配项。
- 原始字符串:
-
.split("")
:split()
方法是将字符串按照指定的分隔符分割成数组的常用方法。- 原始字符串:
"123456"
分割成字符数组后的结果:["1", "2", "3", "4", "5", "6"]
-
.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)
- [...input_values] 将
input_values
转换为一个数组类型。 - .map(Number)将字符数组中的每个元素转换为数字。
- .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 转换为数组并返回。
};
逐行解释
-
函数定义:
let randomCoin = () => {
- 定义了一个名为
randomCoin
的箭头函数(匿名函数),该函数没有参数。
- 定义了一个名为
-
创建 Set 对象:
let set = new Set();
- 创建一个新的
Set
对象,用于存储唯一的随机数。
- 创建一个新的
-
循环条件:
while (set.size < 3) {
- 使用
while
循环,当Set
中的元素数量少于 3 时,继续执行循环体。
- 使用
-
生成随机数并添加到 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():向上取整,总是返回大于或等于输入值的最小整数。
- 生成一个 1 到 9 之间的随机整数:
-
结束循环:
- 当
Set
中的元素数量达到 3 时,循环结束。
- 当
-
返回数组:
return [...set];
- 使用扩展运算符
[...set]
将Set
转换为数组并返回。
- 使用扩展运算符