JavaScript練習筆記整理·2 - 6.24

來源:互聯網
上載者:User

標籤:底線   max   let   最大   最小   bsp   case   src   相同   

 Codewars地址:https://www.codewars.com/歡迎和大家一起來討論~  基礎練習(1): 我的解答為:
function isIsogram(str){  if(str == "") return true;  return str.toLowerCase().split("").sort().every(function(item,index,array) {   return item != array[index+1];  });; }
 較優解一:
function isIsogram(str){  return !/(\w).*\1/i.test(str)}

較優解二:

function isIsogram(str){  var i, j;  str = str.toLowerCase();  for(i = 0; i < str.length; ++i)    for(j = i + 1; j < str.length; ++j)      if(str[i] === str[j])        return false;  return true;
  分析:

第一位小夥伴是使用Regex來判斷是否有重複的值,方法簡單,而我一開始就沒想到可以用這個方法,Hhhh。而第二位小夥伴則是先將轉為小寫,再用一個複合迴圈來比較每個字串與自身以外的字串是否相等,若相等則返回false。而我的思路與第二位相似,先將判斷是否為空白字串,若為空白則為true。接著再轉為小寫,使用空格分隔將字串轉為數組,進行排序後使用迭代方法,判斷排序後的數組中是否存在相同的字元,若不存在的則返回true。

在剛開始使用迭代方法時,沒有考慮到進行每一項與數組中每一項比較的時候,自身與自身比較會返回false,導致一直錯誤。後來查了資料才選擇先排序再比較每一項與其後一項是否相等來判斷是否有重複的值。相比之下,我想的是複雜了一些。

  筆記:

Regex:通過RegExp類型支援Regex,建立Regex的文法為:var expression = /pattern/flags;

其中模式pattern是任何Regex。每個Regex都可帶有一個或多個標記flags,用以標明Regex的行為。Regex的匹配模式支援三個標誌:g(全域)、i(不區分大訊息)、m(多行模式)。因Regex比較複雜,具體的模式在此不再敘述了。

 

看較優解一的Regex/(\w).*\1/i ,解釋如下:圓括弧()表示提取匹配的字串,對字元進行分組。括弧中的\w表示匹配包括底線在內的任何單詞字元。點.表示匹配分行符號以外的任何字元。星號*表示匹配零次或多次。\1表示與第一個小括弧中要匹配的內容相同。注意\1必須配合小括弧使用。

 

Regex後的test()方法可以知道目標字串與某個模式是否匹配,接收一個字串參數。在模式與該參數匹配的情況下返回true。否則,返回false。

 

基礎練習(2):

我的解答:

function digitize(n) {  return n.toString().split("").reverse();}

一開始看到題目的時候信心滿滿,哇,這很簡單呐,先是將數值型資料轉為字元型,再使用split()方法轉為數組,最後使用reverse()方法翻轉數組就好了。結果…出現了…這樣的結果……

百思不得其解,懷疑是不是題目的測試有什麼問題,最後跑去看了答案,才知道需要在轉為數組後再將字元改為數值型,才能避免上述的錯誤。

function digitize(n) {  return n.toString().split("").map(Number).reverse();}

 

基礎練習(3):

我的解答為:

var isSquare = function(n){  if(n<0) return false;  if(Math.sqrt(n) % 1 == 0) {return true}  else {return false};}

較優解為:

function isSquare(n) {  return Math.sqrt(n) % 1 === 0;}
  分析:

相比之下,思路是一樣的,而我的解答則多寫了一些語句,不夠簡潔,這道題目也是很簡單的了,所有沒有筆記,Hhhh。

 

基礎練習(4):

我的解答為:

function GetSum( a,b ) {  if(a == b) return a;  var i = a>b?b:a;  var length = (a>b?a:b)+1;  var sum = 0;  for(var i;i<length;i++) {    var sum = sum + i ;  }  return sum;}

較優解為:

const GetSum = (a, b) => {  let min = Math.min(a, b),      max = Math.max(a, b);  return (max - min + 1) * (min + max) / 2;}
  分析:

我的思路主要是求出a、b中的最大值和最小值後用for迴圈求出它們之間的數的和,想法也是挺奇葩的,Hhhh。而較優解的這位小夥伴求出最值以後,用了等差數列的求和公式,真是機智的做法!!!果然想學好編程還要能運用好數學知識呢,學到了,Hhhh。

  總結:

今天做的題目所需要的知識基本和昨天是一樣的,運用方法上越來越熟練了。但是做題目的時候,經常會遇到一些自己認為理所當然是這樣做的解法,結果一測試就會發現有錯誤,感覺莫名其妙找不到錯誤的時候,經常就炸毛了。今天一次是第二個練習的錯誤,以往都是對的情況下,這次挖了坑,也知道了以後遇到問題的時候就要轉變思路,去解決問題,而不是在懷疑人生。第二次是沒有好好理解題目,以為很簡單,結果是自己理解錯誤了,這大概也是要好好理解使用者需求的意思吧,Hhhh。

偶然間做到了一道升級的題目,順利升級,看到Codewars的提示也是滿滿的鼓勵,真是路漫漫之遠兮,吾將上下而求索呀,明天繼續加油吧!

 

 

 

JavaScript練習筆記整理·2 - 6.24

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.