1、随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么
思路:Math.random()生成的随机数在0-1,要想生成五位数以内的数--》随机数*100000
此时生成的数是数字型,(数字型转换为字符型的简单方法:在数字的后面加上一个空的字符串即可)。最后循环遍历字符串即可得到每个字符串元素。
var n = parseInt(Math.random() * 100000);
var str = n + "";
console.log(str);
console.log("共有" + str.length + "位");
for (var i = 0; i < str.length; i++) {
console.log(str[i]);
}
2、敏感词过滤
思路:首先定义一个数组来存放敏感词,使用for循环进依次遍历数组中的敏感词(一个一个的替换,一个引号里面为一个)。最后使用字符串的replace方法进行替换,若不加All则只替换第一次出现的,加All会全部替换。
注:所有的字符串方法 都不改变字符串,若不定义新数组接收需重新赋值给该数组
var arr = ["SM", "垃圾"];
var str = "asdasdSMasdasdasdSMsdasdasdSMsadasd垃圾";
for (var i = 0; i < arr.length; i++) {
//遍历每一个敏感词 --去替换
var item = arr[i];
//*所有的字符串方法 都不改变字符串,若不定义新数组接收需重新赋值给该数组
str = str.replaceAll(item, "**");
}
console.log(str);
3、数字字母混合6位验证码
'1234567890qwertyuiopasdfghjklzxcvbnm' 随机在字符串中取六次
思路:首先定义一个空的字符串,用来拼接随机出来的字符。由于要抽取6次,所以需要使用循环来随机生成六个字符。使用parseInt(Math.random() * str.length)来得到字符串中的下标,根据下标来找到对应元素。最后进行字符串的拼接即可。
var str = "1234567890qwertyuiopasdfghjklzxcvbnm";
var res = "";
for (var i = 0; i < 6; i++) {
var index = parseInt(Math.random() * str.length);
var c = str[index];
res = res + c;
}
console.log(res);
4、 已知字符串“a,a,b,c,c,d”,统计每个字符出现的次数,结果显示 a 2、b 1、c 2、d1。
思路:第一步首先将字符串转为数组,然后使用数组的filter()方法将数组进行过滤筛选,满足条件该值在数组中的索引等于该值的索引将其值返回。第二步,将去重后的到元素去和原字符串进行一一比较,此处使用for循环来进行遍历以及定义一个变量来记录相同的次数。如果两个值相等就将变量的值加1即可。
var str = "a,a,b,c,c,d";
var arr = str.split(","); //将字符串转为数组
//console.log(arr);
var resArr = arr.filter(function(v, i) {
//v表示数组的每一项,i表示数组索引
return arr.indexOf(v) == i;
});
//console.log(resArr);
//让新数组中保留的每一个元素在原字符串中去匹配
for (var i = 0; i < resArr.length; i++) {
var time = 0;//求变量的值 在 str 中出现的次数
for (var j = 0; j < str.length; j++) {
if (resArr[i] == str[j]) {
time++;
}
}
console.log(resArr[i] + " " + time);
}
补:字符串去重的方法
方法1:ES6的filter()方法
// 使用 filter 过滤数组
var newArr = arr.filter(function (item, index, arr) {
// item 就是数组中的每一项
// index 就是数组的索引
// arr 就是原始数组
return 满足条件
})console.log(newArr) // [2, 3]
注:需要将字符串转为数组来使用
var str = "a,a,b,c,c,d"; var arr = str.split(","); //将字符串转为数组 //console.log(arr); var resArr = arr.filter(function(v, i) { //v表示数组的每一项,i表示数组索引 return arr.indexOf(v) == i; }); //console.log(resArr);
方法2:ES6的set() 方法
将字符串去重转为数组,使用...new Set()方法对数组进行去重
若字符串为"abccdd"时,使用set()方法+join()方法(对字符串去重)
var str = "a,a,b,c,c,d"; var arr = str.split(","); //将字符串转为数组,去掉字符串中的"," var newStr = [...new Set(arr)]; console.log(newStr);
方法3:for循环+ includes()方法
通过for循环来遍历字符中的每个字符,接着使用字符串的includes()方法来判断新数组中是否包含该元素,若包含则返回true,不包含返回false。最后将字符添加到新数组中即可。
var str = "aabccd"; var arr = ""; for (var i = 0; i < str.length; i++) { if (!arr.includes(str[i])) { arr = arr + str[i]; } } console.log(arr);
方法4:for循环 + indexOf()方法
通过for循环来遍历字符中的每个字符,接着使用字符串的indexOf()方法来判断,如果要查找元素在新字符串中不存在(返回值即是-1)则将该素添加新数组中即可。
var str = "aabccd"; var arr = ""; for (var i = 0; i < str.length; i++) { if (arr.indexOf(str[i]) == -1) { arr = arr + str[i]; } } console.log(arr);
方法5:for循环 + search()方法
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
如果没有找到任何匹配的子串,则返回 -1。
var str = "aabccd"; var arr = ""; for (var i = 0; i < str.length; i++) { if (arr.search(str[i]) == -1) { arr = arr + str[i]; } } console.log(arr);
总:前两种是ES6新增方法,优点是使用方便,缺点有兼容性。
后三种思路一样,区别在于使用的方法不一样