字符串小典例

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新增方法,优点是使用方便,缺点有兼容性。

         后三种思路一样,区别在于使用的方法不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值