js系列之每天一练成长录之一

185 阅读1分钟

题目: 写一个函数判断字符串中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 ;
   }