用JS实现回文数的精准辨别!!!

摘要:
还好,不负有心人,嘿嘿嘿,现在为大家详细分享用JS实现精准回文数的辨别!!!所以,我们第一步要做的就是,将不是数字和字母的统统去掉!!!数组是引用类型!!!这才是问题的关键!!!很简单,既然数组不行,那我就用基本类型里的String!!!我们将反转后的数组再转换成字符串,然后比较两个字符串varnewStr2=arr2.join('');//重构倒序的字符串if{//比较1returntrue;}else{returnfalse;}这样,用JS判断回文数的整个思路就出来啦~下面是完整的代码,大家可以复制下来运行下哦1˂!

笔者最近在一边看《JS高级程序设计3》一边在FCC上找题目练习啊。那叫一个爽。这不,刚刚用生命在课堂,寝室,实验室,图书馆等各种场所将第五章“引用类型”搞定,FCC便知趣的给笔者来了个“回文数”,笔者咬牙切齿,花了两天时间,又是研究数组,又是研究字符串,又是研究作用域,还看了很长时间的正则表达式。还好,不负有心人,嘿嘿嘿,现在为大家详细分享用JS实现精准回文数的辨别!!!

先给大家看几个类型的字符串:

race car

not a palindrome

A man, a plan, a canal. Panama

My age is 0, 0 si ega ym.

0_0 (: /- :) 0-0

麻烦啊,又是字母,又是数字,还有下划线,空格,点等等不知道什么东西。。。

所以,我们第一步要做的就是,将不是数字和字母的统统去掉!!!

这里,用到第一个方法了,名字叫做replace(),这里我们重点分享思路,不清楚replace()还有下面一些其它方法的同学自己去查询哦。

好了,我们大概的思路是,replace(exp,"").意思就是,匹配所有的非字符,然后去掉它。

那么问题就来了,正则表达式怎么匹配所有的非字符呢?

这个问题可是让我想破了脑袋啊-.-

开始的时候,有朋友建议我用s后来才知道,它匹配的是空白字符,所以一些符号却是无法匹配到的

经过了我对正则表达式的一番研究,加上和朋友的一些探讨(登门请教的哦~),终于让我找到了方法

W+匹配所有的非字符

因为,w匹配的是数字,字母,所以W 就是反义了。

然而还没完呢,W它匹配不了下划线,所以我们还得再加上\_+

1 var newStr= str.replace(/W+/g,'');//匹配所有非单词的字符,替换为空字符串
2   newStr= newStr.replace(/\_+/g,'');//匹配所有下划线,替换为空字符串 
3   newStr=newStr.toLowerCase();

到这里,我们便解决了大小写问题和非字符的干扰

接下来,只要利用引用类型里的方法,确定它是回文数就可以了。

好,我们的思路是,将得到的字符串转换成数组arr1,然后将数组反转得到另一个数组arr2,

只需要for循环两个数组arr1【i】==arr2【i】,如果是回文数,那么毫无疑问,等式是成立的,如果不是回文数,等式不成立

1 var arr1= newStr.split('');//将得到的字符串转换成数组
2   var arr2=arr1.reverse();//将数组反转,得到另一个数组
3   for(i=0;i<arr1.length;i++){
4       if(arr1[i]==arr2[i]){
5           return true;
6       }else{
7           return false;
8 }
9   } 

看起来好像没问题呀~

当我满怀信心的运行时,浏览器并没有给我期待的答案:(

问题出在哪里呢?

不知道大家记不记得数组是什么类型呢?

对!!!数组是引用类型!!!arr1与arr2都指向同一个堆啊!!!

用JS实现回文数的精准辨别!!!第1张

当我们写下arr1.reverse()时,这个堆便改变了,反转了!!!这才是问题的关键!!!所以我们在for()循环里比较的竟然时两个同样的数组!!!(Oh My God!!!)

问题找出来了,怎么解决?

很简单,既然数组不行,那我就用基本类型里的String!!!

我们将反转后的数组再转换成字符串,然后比较两个字符串

var newStr2=arr2.join('');
  //重构倒序的字符串
  if(newStr==newStr2){//比较1
    return true;
  }else{
   return false;
  }

这样,用JS判断回文数的整个思路就出来啦~

下面是完整的代码,大家可以复制下来运行下哦

1 <!DOCTYPE html>
2 <html>
3     <head>
4         <meta charset="utf-8" />
5         <title></title>
6     </head>
7     <body>
8         <script type="text/javascript">
9         functionpalindrome(str) {
10   //Good luck!
11   var newStr= str.replace(/W+/g,'');//匹配所有非单词的字符,替换为空字符串
12   newStr= newStr.replace(/\_+/g,'');//匹配所有下划线,替换为空字符串 
13   newStr=newStr.toLowerCase();
14   //转化字符串为小写
15   var arr1= newStr.split('');
16 ;
17   var arr2=arr1.reverse();
18   
19   var newStr2=arr2.join('');
20   //重构倒序的字符串
21 
22   if(newStr==newStr2){//比较1
23     return true;
24   }else{
25    return false;
26 }
27 }
28 palindrome("not a palindrome");
29 
30         </script>
31     </body>
32 </html>

分享结束,谢谢大家。

免责声明:文章转载自《用JS实现回文数的精准辨别!!!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇像asp.net Mvc一样开发nodejs+express Mvc站点Laravel session的保存机制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

将一个文件夹中我们需要的文件拷贝到另一个文件夹中的代码实现

1 package cn.itsource.homework; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.util.ArrayList; 7 /** 8 * 需求:...

Mongodb中的js语法

定义一个变量 > var len = 10; For循环 这里的db和data都可以作为对象 save是方法 接收一个临时定义的对象 > for(var i = 0; i < len; i++){db.data.save({x:i})}; WriteResult({ "nInserted" : 1 }) > db.dat...

js动态获取虚拟目录名称 相当于服务端ResolveUrl("")方法

function_GetScriptLocation(){varscriptLocation="";varscriptName="Utility.js";varscripts=document.getElementsByTagName('script');for(vari=0;i<scripts.length;i++){varsrc=scripts...

Redis实现之压缩列表

压缩列表 压缩列表(ziplist)是列表键和哈希键的底层实现之一,当一个列表键只包含少量列表项,并且每个列表项要嘛是整数值,要嘛是比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。例如,执行以下命令将创建一个压缩列表键的底层实现 127.0.0.1:6379> RPUSH lst 1 3 5 10086 "hello" "worl...

js-滑块拼图登录验证

一、为什么会有滑块登录验证 很多网站为了防止机器人登录操作,往往会会添加一个滑块拼图验证,必须要拖拽拼成完整才能登录成功。 二、案例展示 刷新页面,即可产生随机位置的两个方块,只有图片滑块滑倒空白方块附近才能算验证成功,可以设置允许有几像素的误差;离目标较远会自动返回。 三、具体实现代码 <!DOCTYPE html> <h...

ASP.NET Core 资源打包与压缩

目的: 将多个资源文件(css、js)捆绑在一个文件中 压缩文件,去除空格换行,减小文件体积 步骤: 1、在NuGet下载 BuildBundlerMinifier 包 2、在项目根目录创建配置文件,如下: [ { "outputFileName": "wwwroot/js/info.min.js", /*输出的文件地址,注意:如果要压缩文件,...