我來教你用JS玩回文數(shù)澜搅!

筆者最近在一邊看《JS高級程序設(shè)計3》一邊在FCC上找題目練習(xí)啊。那叫一個爽邪锌。這不勉躺,剛剛用生命在課堂,寢室觅丰,實驗室饵溅,圖書館等各種場所將第五章“引用類型”搞定,F(xiàn)CC便知趣的給筆者來了個“回文數(shù)”舶胀,筆者咬牙切齒概说,花了兩天時間碧注,又是研究數(shù)組,又是研究字符串糖赔,又是研究作用域萍丐,還看了很長時間的正則表達式。還好放典,不負有心人逝变,嘿嘿嘿,現(xiàn)在為大家詳細分享用JS實現(xiàn)精準(zhǔn)回文數(shù)的辨別7芄埂?怯啊!
先給大家看幾個類型的字符串:
race car
not a palindrome
A man, a plan, a canal. Panama
My age is 0, 0 si ega ym.
0_0 (: /-\ :) 0-0
麻煩啊弥臼,又是字母宴咧,又是數(shù)字,還有下劃線径缅,空格掺栅,點等等不知道什么東西。纳猪。氧卧。
所以,我們第一步要做的就是氏堤,將不是數(shù)字和字母的統(tǒng)統(tǒng)去掉I尘!鼠锈!
這里闪檬,用到第一個方法了,名字叫做replace(),這里我們重點分享思路脚祟,不清楚replace()還有下面一些其它方法的同學(xué)自己去查詢哦谬以。
好了,我們大概的思路是由桌,replace(exp,"").意思就是为黎,匹配所有的非字符,然后去掉它行您。
那么問題就來了铭乾,正則表達式怎么匹配所有的非字符呢?
這個問題可是讓我想破了腦袋啊-.-
開始的時候娃循,有朋友建議我用\s后來才知道炕檩,它匹配的是空白字符,所以一些符號卻是無法匹配到的
經(jīng)過了我對正則表達式的一番研究,加上和朋友的一些探討(登門請教的哦~)笛质,終于讓我找到了方法
\W+匹配所有的非字符
因為泉沾,\w匹配的是數(shù)字,字母妇押,所以\W 就是反義了跷究。
然而還沒完呢,\W它匹配不了下劃線敲霍,所以我們還得再加上_+

1 var newStr= str.replace(/\W+/g,'');//匹配所有非單詞的字符俊马,替換為空字符串
2 newStr= newStr.replace(/\_+/g,'');//匹配所有下劃線,替換為空字符串
 3 newStr=newStr.toLowerCase();

到這里肩杈,我們便解決了大小寫問題和非字符的干擾
接下來柴我,只要利用引用類型里的方法,確定它是回文數(shù)就可以了扩然。
好艘儒,我們的思路是,將得到的字符串轉(zhuǎn)換成數(shù)組arr1夫偶,然后將數(shù)組反轉(zhuǎn)得到另一個數(shù)組arr2,
只需要for循環(huán)兩個數(shù)組arr1【i】==arr2【i】彤悔,如果是回文數(shù),那么毫無疑問索守,等式是成立的,如果不是回文數(shù)抑片,等式不成立

1 var arr1= newStr.split('');//將得到的字符串轉(zhuǎn)換成數(shù)組
2 var arr2=arr1.reverse();//將數(shù)組反轉(zhuǎn),得到另一個數(shù)組
3 for(i=0;i<arr1.length;i++){
4 if(arr1[i]==arr2[i]){
5 return true;
6 }else{
7 return false;
8  }
9 }

看起來好像沒問題呀~
當(dāng)我滿懷信心的運行時卵佛,瀏覽器并沒有給我期待的答案:(
問題出在哪里呢?
不知道大家記不記得數(shù)組是什么類型呢敞斋?
對=赝簟!植捎!數(shù)組是引用類型Q媒狻!焰枢!arr1與arr2都指向同一個堆膀韭汀!<贸暑椰!
看圖!<鼍一汽!


Paste_Image.png

當(dāng)我們寫下arr1.reverse()時,這個堆便改變了低滩,反轉(zhuǎn)了U偌小Q遗纭!這才是問題的關(guān)鍵<嘣鳌I匆狻!所以我們在for()循環(huán)里比較的竟然時兩個同樣的數(shù)組7懵病8狙ā!(Oh My God!!!)
問題找出來了隶债,怎么解決腾它?
很簡單,既然數(shù)組不行死讹,那我就用基本類型里的StringB鞯巍!赞警!
我們將反轉(zhuǎn)后的數(shù)組再轉(zhuǎn)換成字符串妓忍,然后比較兩個字符串

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

這樣,用JS判斷回文數(shù)的整個思路就出來啦~
下面是完整的代碼愧旦,大家可以復(fù)制下來運行下哦

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
        function palindrome(str) {
  // Good luck!
  var newStr= str.replace(/\W+/g,'');//匹配所有非單詞的字符世剖,替換為空字符串
  newStr= newStr.replace(/\_+/g,'');//匹配所有下劃線,替換為空字符串 
  newStr=newStr.toLowerCase();
  //轉(zhuǎn)化字符串為小寫
  var arr1= newStr.split('');
;
  var arr2=arr1.reverse();
  
  var newStr2=arr2.join('');
  //重構(gòu)倒序的字符串

  if(newStr==newStr2){//比較1
    return true;
  }else{
   return false;
  }
}
palindrome("not a palindrome");

        </script>
    </body>
</html>

分享結(jié)束笤虫,謝謝大家旁瘫,寫作不易,點個贊吧琼蚯!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酬凳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子遭庶,更是在濱河造成了極大的恐慌宁仔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峦睡,死亡現(xiàn)場離奇詭異翎苫,居然都是意外死亡,警方通過查閱死者的電腦和手機赐俗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門拉队,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阻逮,你說我怎么就攤上這事粱快。” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵事哭,是天一觀的道長漫雷。 經(jīng)常有香客問我,道長鳍咱,這世上最難降的妖魔是什么降盹? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮谤辜,結(jié)果婚禮上蓄坏,老公的妹妹穿的比我還像新娘。我一直安慰自己丑念,他們只是感情好涡戳,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脯倚,像睡著了一般渔彰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上推正,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天恍涂,我揣著相機與錄音,去河邊找鬼植榕。 笑死再沧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尊残。 我是一名探鬼主播产园,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夜郁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粘勒,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竞端,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后庙睡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體事富,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年乘陪,在試婚紗的時候發(fā)現(xiàn)自己被綠了统台。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡啡邑,死狀恐怖贱勃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤贵扰,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布仇穗,位于F島的核電站,受9級特大地震影響戚绕,放射性物質(zhì)發(fā)生泄漏纹坐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一舞丛、第九天 我趴在偏房一處隱蔽的房頂上張望耘子。 院中可真熱鬧,春花似錦球切、人聲如沸谷誓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽片林。三九已至,卻和暖如春怀骤,著一層夾襖步出監(jiān)牢的瞬間费封,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工蒋伦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弓摘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓痕届,卻偏偏與公主長得像韧献,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子研叫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評論 0 4
  • 從苑子文口中我知道了一個愛狗锤窑、寬容、對人對事有溫度又有方法的小孩王萌嚷炉,從苑子豪話里我知曉了一個勇敢渊啰、樂觀、對理想堅...
    泠藝萱閱讀 259評論 0 0
  • 人這一生有很多的時刻是不敢回想的申屹。而我人生的每一刻都是不敢去回想的绘证。 以前年輕,喜歡流眼淚的感覺哗讥,所以總是一層層撥...
    不憶過去閱讀 234評論 0 0
  • 9.16 2.13兩 多多因為地板涼的原因 感冒加嚴重咳嗽 好心疼 去西爾小寵配了點藥 希望多多快點好起來
    turbozhang閱讀 188評論 0 0
  • 在眾生泅渡的水域嚷那, 不經(jīng)意 登上了一只渡船。 船上既沒有艄公也無舵手杆煞, 遂撐起信念的蒿魏宽, 擺渡紅塵腐泻。 寒來暑往, ...
    閬苑寒梅閱讀 471評論 9 7