js初级算法合集


js初级算法合集

一、翻转字符串

自己写出来的丑陋代码

function reverseString(str) {
    var turn = '';
for (var i = str.length-1; i > -1; i--) {
    turn = turn + str[i];
}
return turn;
}
reverseString("hello");

输出为:

olleh

二、阶乘算法

function factorialize(num) {
    var sum =1;
    for (var i = 1; i <= num; i++) {
        sum = sum * i;
    }
return sum;
}

factorialize(5);

输出为:

120

三、判断文字是否为回文

function palindrome(str) {
// 删除文字中的空格,符号,留下字母
var newstr = str.replace(/[^0-9a-z]/gi, "");
// 把大写的字母转换成小写字符
newstr = newstr.toLowerCase();
// 把原有的字符串回文
for (var i = 0, j = newstr.length - 1; i < j; i++, j--) { 
    if (newstr.charAt(i) !== newstr.charAt(j)) 
    { 
        return false; //逐个字符比较,不匹配返回false
    } 
} 
return true;

}
palindrome("eye");

输出为:

true

四、寻找最长的单词算法

function findLongestWord(str) {
    var str_list = str.split(" "); //根据空格进行单词分割,放入列表
    var word_lenght = 0;
    for (var i=1; i < str_list.length; i++){  
        if (str_list[i].length > word_lenght) {
            word_lenght = str_list[i].length; //遇见长度大的赋值
        }
    }
        
    return word_lenght;
}

五、设置首字母大写算法

function titleCase(str) {
  var newStr = str.split(" ");
  for(var i=0; i<newStr.length; i++){
    newStr[i] = newStr[i].slice(0, 1).toUpperCase() + newStr[i].slice(1).toLowerCase(); //使用切片和转化大小写函数实现
  }
  return newStr.join(" ");  //使列表用空格生成句子
}

titleCase("I'm a little tea pot");

结果为:

I'm A Little Tea Pot

六、寻找数组中的最大值

function largestOfFour(arr) {
    var arr_list = [];
    for (var i=0; i<arr.length; i++){
        arr_list[i] = 0;
        for (var u=0; u<arr[i].length; u++){
            var max_num=0;
            if (arr[i][u]>arr_list[i]){
                arr_list[i] = arr[i][u]
        }
    }
}
return arr_list;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

结果为:

[5,27,39,1001]

七、确认末尾字符

function confirmEnding(str, target) {
//截取与判断字符相同的字符
var tar_length = target.length;
var str_last = str.substr(-tar_length)
//与判断字符比较
if ( target == str_last ){
    return true;
}
return false;
}

// return target==str_last;

confirmEnding("Bastian", "n");

八、重复操作算法

function repeat(str, num) {
    if(num > 0)
    {
        var newStr = "";
        for(var i = 0; i < num; i++){
            newStr = newStr + str;
        }
        return newStr;
    }
    else return "";
}

repeat("abc", 3);

九、字符串截取算法

显示约定多的字符,多余的字符用…表示

function truncate(str, num) {
if (num > 3){
    if (str.length > num){
        str = str.slice(0, num-3) + "..."
    }
}else{  
    str = str.slice(0,num) + "..."  
}
return str;
}

truncate("A-tisket a-tasket A green and yellow basket", 11);

十、数组分割算法

基本上就是字符串分割算法,这个还是不太合理,需要更加合理的底层算法。

function chunk(arr,size){       
    var chunk=[];       
    while(arr.length>0){           
        chunk.push(arr.splice(0,size));   
    }
return chunk;
}
chunk(["a", "b", "c", "d"], 2);

十一、数组截断算法

第一个参数从第二个参数开始截断

function slasher(arr, howMany) {
    if (howMany > arr.length) {
        arr = [];
    } else {
        arr = arr.splice(howMany)
    }
    return arr;
}

slasher([1, 2, 3], 1);

十二、数组查询算法

[“hello”, “Hello”]应该返回true,在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。

[“hello”, “hey”]应该返回false,因为字符串”hello”并不包含字符”y”。

function mutation(arr) {
    var str1 = arr[0].toLowerCase();
    var str2 = arr[1].toLowerCase();
    var strArr = str2.split("");

    for (var i = 0; i < strArr.length; i++) {
        var pos = str1.indexOf(strArr[i]);  ////indexOf用于从头到尾检测字符串是否含有字串,它对大小写敏感
        if (pos === -1) {
            return false;
        }
    }
    return true;
}
mutation(["hello", "hey"]);

十三、删除数组中特定值算法

删除数组中的所有的假值。
在JavaScript中,假值有false、null、0、””、undefined 和 NaN。

function bouncer(arr) {
var t = [];
for (var i = 0; i < arr.length; i++) {
    if (Boolean(arr[i])) {  //直接转换成布尔值if来判断。
       t.push(arr[i]);
    }
}
return t;
}

十四、去除数组中任意多个值算法

实现一个 destroyer 函数,第一个参数是初始数组,后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。

destroyer([1, 2, 3, 1, 2, 3], 2, 3) 应该返回 [1, 1].

destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) 应该返回 [1, 5, 1].

这个暂时不太理解,摘自[https://blog.csdn.net/qq_42044073/article/details/82491676]

function destroyer(arr) {
    return [].slice.call(arguments).reduce(function (prev, next) {

        return prev.filter(e => e !== next);
    });
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

十五、数组排序并插入值算法

function where(arr, num) {
    
arr.sort(function(a,b){   //首先进行数组的排序
   return a - b;
 })
    for(var i = 0; i < arr.length; i ++){  //遍历数字找到对应的索引
        if (arr[i] >= num){  
            return i;
        }else if (num > arr[arr.length-1]){  //如果没有适合的插入点,直接插入到最后
            return arr.length;
        }
    }
}
where([2, 5, 10], 15)

文章作者: theing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 theing !
评论
  目录