js系列之每天一練成長錄之一

wangxiaojin發表於2018-08-15

題目: 寫一個函式判斷字串中x的數量和o的數量是否相等(忽略大小寫): XO("ooxx") => true XO("xooxx") => false XO("ooxXm") => true XO("zpzpzpp") => true // 沒有x也沒有o,認為它們的長度都是0,也為相等. XO("zzoo") => false

function XO(str){
    let x=str.match(/x/ig);//求出x的陣列
    let o=str.match(/o/ig);//求出o的陣列
    if(x&&o){
       return x.length==o.length?true:false;
    }else if(!x&&!o){
       return true
    }else {
        return false;
    }
}



複製程式碼

此題中主要用到了字串的match方法,下面我們簡單的回顧下match的用法

  • 匹配字元:
let  str="abc";
let  c=str.match("a");
console.log(c);
["a", index: 0, input: "abc"] 


複製程式碼

c 的返回值,如果有,返回值是一個陣列,第一項代表要匹配的字元"a",第二項,index 就是找到a第一次出現的位置,input代表的是整個原始的字串.如果字串中沒有符合條件的就是返回null

  • 匹配正則:
 let str="abcAbx";
 let c=str.match(/a/ig);
 console.log(c);
 ["a", "A"];
 

複製程式碼

match匹配正則的時候,如果找到符合條件的返回的陣列,如果找不到返回的就是null;

在會的基礎上尋找更優的做法

  • 1 str.split 結合filter方法(filter方法中的方法體如果不加大括號就相當於return)
  function XO(str){
      str=str.toLowerCase().split("");
      return str.filter(item=>item==='x').length===str.filter(item=>item==='o').length
  }

複製程式碼

*2 正則匹配

   function XO(str){
      return (str.match(/x/ig)||[]).length===(str.match(/o/ig)||[]).length ;
   }


複製程式碼

相關文章