美文网首页
JS初级算法

JS初级算法

作者: 猫晓封浪 | 来源:发表于2019-02-27 16:18 被阅读0次

判断回文字符串:

如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是 palindrome (回文)。
思路:使用正则去掉不相关符号后,将字符串分割字符串spilt() 方法)为数组,再将得到的数组翻转数组reverse() 方法)后组合为新字符串,最后判断新、旧字符串是否相等。

  • split() 方法用于把一个字符串分割成字符串数组。
  • reverse() 方法用于颠倒数组中元素的顺序。
function palindrome(str) {
 // 先后去除空格和非数字字母的字符
  var newStr = str.replace(/\s/g,"").replace(/[^a-zA-Z0-9]/g,"").toLowerCase();
  //判断翻转后的字符串是否与原字符串相等
  var reverStr = newStr.split("").reverse().join("");
   if(reverStr === newStr){
      return true;
   }else{
     return false;
  } 
}


句中单词首字母大写其余小写

确保字符串的每个单词首字母都大写,其余部分小写。像 'the' 和 'of' 这样的连接符同理。

思路:

  1. 使用字符串分割将长句分为字符串数组1,接着使用双重循环第一重循环将数组1的每一项字符串分割为数组2,第二重循环是将数组2的首项大写,其余项小写。最后使用数组方法拼接为长句字符串。
function titleCase(str) {

  var arr1=str.split(" ");//拆分字符串为数组
  var arr2; 
  var newstr;

  for(var i=0; i < arr1.length;i++){

   arr2=arr1[i].split("");  
   arr2[0] = arr2[0].toUpperCase(); 

   for(var j=1;j < arr2.length;j++){

       arr2[j] = arr2[j].toLowerCase();

        }
    arr1[i] = arr2.join(""); 
  }
  newstr = arr1.join(" ");
  return newstr;
}
  1. 将长句字符串全部转化为小写,再将其首字母转为大写。
function titleCase(str) {
  // 请把你的代码写在这里
  var newStr=str.toLowerCase().split(" ").map(function(item){
    return item[0].toUpperCase()+item.slice(1);
  }).join(" ");
  return newStr;
}


将数组按照制定长度进行分组

把一个数组 arr 按照指定的数组大小 size 分割成若干个数组块。

例如: chunk([1,2,3,4],2)=[[1,2],[3,4]] ;
chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]] ;

思路:声明一个空数组,然后将分割后的数组追加到该数组上。分割数组用 Array.slice() 方法。

function chunk(arr, size) {
  var newArr=[];
  for(var i=0;i<arr.length;i=i+size){ // 每次循环增加分割数组的长度个
    newArr.push(arr.slice(i,i+size)); 
  }
  return newArr;
}


比较字符串

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

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

function mutation(arr) {
  for(var j=0;j<arr[1].length;j++){
    if(arr[0].toLowerCase().indexOf(arr[1].toLowerCase()[j])===-1){
      return false;
    }
  }
  return true;
}

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。(此方法对大小写敏感)



过滤数组假值

删除数组中的所有假值。
在JavaScript中,假值有 falsenull0""undefinedNaN

function bouncer(arr) {
  var newArr=arr.filter(function(item){
    return Boolean(item);
  });
  return newArr;
}

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。filter() 不会对空数组进行检测。filter() 不会改变原始数组。



去掉数组中指定项

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

思路:将数组中的数字和后面的参数进行一一匹配,不相等则返回,相等则不返回。

方法:算法类似过滤因此可以使用 filter 函数,将数组中的数字过滤。

使用 arguments 来进行参数的遍历

function destroyer(arr) {
  var arr_arg = arguments;
  for(var i = 1; i < arr_arg.length; i++){
     arr = arr.filter(function(val){
       return arr_arg[i] !== val;
     });
  }
  return arr;
}

用for循环将数组中的数字与参数进行匹配,除了第一个参数(为数组)。另一种简单方法



数组排序并找出元素索引

先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。

function where(arr, num) {
  arr.push(num);
  arr.sort(function(a,b){
    return a-b;
  });
  return arr.indexOf(num);
}
  • push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度
  • sort() 方法用于对数组的元素进行排序。
    1. 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

    2. 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

      • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
      • 若 a 等于 b,则返回 0。
      • 若 a 大于 b,则返回一个大于 0 的值。
  • indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。


凯撒密码

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。

function rot13(str) { 
  var arr=[];
  var num;
  for(var i=0;i<str.length;i++){
    num=str[i].charCodeAt();
    if(num >= 65 && num <= 77){
      num=num+13;
    }else if(num > 77 && num < 91){
      num=num-13;
    }
    arr.push(String.fromCharCode(num));
  }
  return arr.join("");
}
  • charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN。
  • fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。该方法是 String 的静态方法,字符串中的每个字符都由单独的数字 Unicode 编码指定。

相关文章

  • JS初级算法

    判断回文字符串: 如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是 palin...

  • 算法——数组常见初级题(JS)

    一、解法:双指针——快慢指针 Leetcode 26 删除排序数组中的重复项解题思路:两个指针都指向数组的一个数,...

  • 算法——初级排序算法

    最近,在通过《算法4》这本书来重新学习一下算法,从最初级的排序算法。初级的排序算法有3种:选择排序、插入排序、希尔...

  • 算法初级

    伪代码与流程图 机构化编程 一行一行的执行代码 有条件控制语句 if...else... 有循环控制语句while...

  • 算法初级

    结构化编程 一行一行的执行 有条件控制语句if...else 有循环控制语句while(exp)do 伪代码 语法...

  • 初级算法

    工作忙完了,就闲着浏览各种各样的网页,看到了W3Cschool的关于算法的挑战,感觉还蛮有意思的,进而总结了一下。...

  • 算法初级

    什么是算法? 以下是高德纳在他的著作《计算机程序设计艺术》里对算法的特征归纳: 输入:一个算法必须有零个或以上输入...

  • 排序(二) -- 进阶排序算法

    背景 我们上一节复习了三个初级的排序算法(选择,插入,冒泡),这一节我们继续学习时间复杂度优于初级算法的三个算法(...

  • 初级算法-Dijkstra算法

    问题描述 一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、...

  • 算法初级(排序算法)

    结构化编程&伪代码 说到排序算法,就要先讲一下什么是结构化编程,总结一下来说,结构化编程有以下特点:1.一行一行执...

网友评论

      本文标题:JS初级算法

      本文链接:https://www.haomeiwen.com/subject/quufuqtx.html