JavaScript算法小集(一)

本文精选了几个有趣的JavaScript算法实现,包括回文判断、查找最长单词、首字大写转换等功能,并提供了具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近回顾了一些js相关的趣味算法,又有一些新收获。感觉个人搭建的博客对有代码的文章的格式支持不是很给力

1.回文

忽略标点、空格以及大小写,正序和反序字符串相同

function palindrome(str) {
    var str1 = str.replace(/\W+/g, '');
    str1 = str1.replace(/\_+/g, '');
    str1 = str1.toLowerCase();
    var arr1 = str1.split('');
    var arr2 = arr1.reverse();
    var str2 = arr2.join('');
    if(str1 == str2){
        return true;
    }else{
        return false;
    }
}

2.最长单词

查找最长单词及其长度

function findLongestWord(str) {
    var length = 0;
    var reg = /[a-z0-9]+/gi;
    var str1 = str.match(reg);
    for(var i = 0; i < str1.length; i++){
        if(str1[i].length > length){
        length = str1[i].length;
        }
    }
    return length;
}

3.首字大写

确保字串每个单词首字大写

function titleCase(str) {
    var str1 = str.toLowerCase();
    var reg = /[a-z']+/g;
    var arr = str1.match(reg);
    var ha = [[]];
    for(var i = 0; i < arr.length; i++){
        ha[i] = arr[i][0].toUpperCase();
        for(var j = 1; j < arr[i].length; j++){
            ha[i] += (arr[i][j]);
        }
    }
    return ha.join(' ');
}

4.指定结尾

确保字串以指定字串结尾

function titleCase(str) {
    var str1 = str.toLowerCase();
    var reg = /[a-z']+/g;
    var arr = str1.match(reg);
    var ha = [[]];
    for(var i = 0; i < arr.length; i++){
        ha[i] = arr[i][0].toUpperCase();
        for(var j = 1; j < arr[i].length; j++){
            ha[i] += (arr[i][j]);
        }
    }
    return ha.join(' ');
}

5.字串截取

a.如果字符串的长度比指定的参数num长,则把多余的部分用…来表示。
b.插入到字符串尾部的三个点号也计入字符串的长度。
c.如果指定的参数num小于或等于3,则添加的三个点号不计入字符串的长度。

function truncate(str, num) {
    var newNum = Math.floor(num);
    if(newNum < 1){
        return ;
    }else if(newNum <= 3){ 
        if(str.length > newNum){
            str = str.substr(0, newNum).concat('...');
        }else{
            str = str.substr(0, newNum);
        }
    }else{
        if(str.length > newNum){
            str = str.substr(0, newNum - 3).concat('...');
        }else{
            str = str.substr(0, newNum);
        }
    }
    return str;
}

6.数组分割

把一个数组arr按照指定的数组大小size分割成若干个数组块。
例如:chunk([1,2,3,4],2)=[[1,2],[3,4]]

function chunk(arr, size) {
    var newSize = Math.floor(size);
    var newArr = [];
    if(arr && (newSize > 0)){
        for(var i = 0; i < arr.length; i += newSize){
            newArr.push(arr.slice(i, i+newSize));
        }
        return newArr;
    }
}

7.数组查询

如果数组第一个字符串包含了第二个字符串的所有字符,函数返回true。

function mutation(arr) {
    if(arr instanceof Array){
        for(var i = 0; i < arr[1].length; i++){
            var reg = new RegExp(arr[1][i], 'gim');
            if(!arr[0].match(reg)){
                return false;
            }
        }
        return true;
    }
}

8.去除数组任意值

第一个参数是待去除的数组,其余的参数是待摧毁的值。

function destroyer(arr) {
    if(arr instanceof Array){
        var args = [];
        for(var j = 1; j < arguments.length; j++){
            args.push(arguments[j]);
        }
        return arguments[0].filter(function(value){
            return args.indexOf(value) === -1;
        });
    }
}

9.位移密码

移位密码也就是密码中的字母会按照指定的数量来做移位。
ROT13密码:字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔’O’,以此类推。
所有的字母都是大写,跳过任何非字母形式的字符(例如:空格,标点符号)。

function rot13(str) {
    var newStr = str.toUpperCase();
    var str1 = [];
    var obj =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
    //abcdefghijklm
    //nopqrstuvwxyz
    var index = 0;
    for(var i = 0; i < newStr.length; i++){
        if(newStr[i] >= 'A' && newStr[i] <= 'Z'){
            index = obj.indexOf(newStr[i]);
            index = (index + 13)%26;
            str1.push(obj[index]);
        }else{
            str1.push(newStr[i]);
        }
    }
    return str1.join('');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值