codewars闖關(guān)小記錄:首字母大寫

寫在前頭

  • 身為一個JS學(xué)渣,每天都在冥思苦想怎么變成一個大師,在看到“學(xué)一門后端語言,有助于進階Js水平”這類話后,開始興沖沖地學(xué)習(xí)后端語言
    (怎么說前端后端真的差很多啊(′?_?`)后端輸出好少嚶嚶嬰,暫時感受不到成就感的說)
    (一天打漁,一星期曬網(wǎng)中)
    (認(rèn)真過一遍《JS高級程序設(shè)計》才是正途吧呀喂\(`0′)/)。

--------話說作為一枚小前端,也應(yīng)該了解一些后端語言嚯!(? ??_??)?--------

  • 言歸正傳,不知為啥雖然看不下那么厚一本《J高》,但是還是要有點追求?。。?/li>
  • 于是某天,我發(fā)現(xiàn)了Codewars!
  • Codewars是啥?看標(biāo)題(? ̄▽ ̄)? 就是各類代碼的小測試小闖關(guān)啦
  • 臥槽!搞起!

好吧,那就搞起唄(*?▽?)


請聽題!

一、創(chuàng)建一個方法來接收數(shù)組,并返回值為首字母為大寫,其余字母小寫的數(shù)組。

Create a method that accepts an array of names, and returns an array of each name 
with its first letter capitalized.
example

capMe(['jo', 'nelson', 'jurie'])     // returns ['Jo', 'Nelson', 'Jurie']
capMe(['KARLY', 'DANIEL', 'KELSEY']) // returns ['Karly', 'Daniel', 'Kelsey']

( ??Д?)?<

  • 碎碎念部分:作為一個渣,第一個想法就是,so easy,恩,先把值拆成兩部分,第一個部分就是首字母啦,然后把它變成大寫噠,剩下都變成小寫噠,恩,直觀又簡單!搞起呀!
  • 涉及到的方法等:
  • toUpperCase()轉(zhuǎn)換為大寫
  • toLowerCase()轉(zhuǎn)換為小寫
  • charAt()返回給定位置的單個字符串(從0個開始算就不說啦┐(‘~`;)┌)
  • slice(3,7)返回給定位置開始的字符串
    (如果有兩個值,就是給定位置之間字符串,這里給的就是返回第4~7這四位字符串)
    (注意:slice()計算位置包括空格,若要不包括,要使用substring()
    (我們這邊暫時用啥都可以啦,因為,沒有空格嘛(≧?≦)/)
  • 我的代碼:
function capMe(names) {
  for (var i = 0; i < names.length; i++){
    var firstLetter = names[i].charAt(0).toUpperCase();
    var remainLetter = names[i].slice(1).toLowerCase();
    names[i] = firstLetter + remainLetter;
    names = names.slice();
  }
  return(names);
}

中間用了concat()來傳遞字符串,然后寫錯了一些代碼,結(jié)果就在數(shù)組末尾多了一個undefined
WHY?。?!(?_?)
不過!終于通過了?。???)
然后,我就提交了,再然后,就可以看到一些大師的代碼(#/。\#)
看完感覺寫了好多廢代碼的說,雖然通過了還是有點小問題,看了別人的代碼以后自己改進了一下。

function capMe(names) {
  for (var i = 0; i < names.length; i++){
    names[i] = names[i].charAt(0).toUpperCase() + names[i].slice(1).toLowerCase();
  }
  return(names);
}

然后,想了想,應(yīng)該也可以用傳說中吊吊的正則,不過,這個暫時放后吧,不大懂不大懂。

  • 先來個版本,這是先都小寫再首字母大寫,substring里面的names[i].length可以去了
 function capMe(names) {
  for (i = 0; i < names.length; i++)
  {
    names[i] = names[i].toLowerCase();
    names[i] = names[i].substring(0, 1).toUpperCase() + names[i].substring(1, names[i].length);
  }
  return names;
 }
  • 再來個版本,倆map也是暈了
function capMe(names) {
   return names.map(function(name) {
      return name[0].toUpperCase() + name.slice(1).split('').map(function(elem, index) {
         return elem.toLowerCase();
      }).join('');
   });
}
  • 再看看贊最多的代碼
function capMe(names) {
  return names.map(
    function (n) { return n.charAt(0).toUpperCase() + n.substring(1).toLowerCase();
 });
}

為什么這么短?。?! _(:з」∠)_

容我仔細瞅瞅,哎喲喂~思路跟我一樣嘛((」?ヘ?)」這很正常吧)
看來我很有當(dāng)大神的潛質(zhì)嘛!(湊不要臉??)_

這么多人用map!醉了醉了醉了!
我要翻翻我的《J高》了(Σ(っ °Д °;)っ你剛剛寫代碼的時候不是一直在翻嗎?。。?/p>

⊙︿⊙沒找到

那就只好谷歌一下了。
這就是map() 的介紹啦。

打不開的我把相關(guān)介紹附在后面了(?′?`?)
看他們舉的例子就造了(map()相當(dāng)于把數(shù)組的每個元素的值,以及索引,以及數(shù)組本身都傳了進去)

function fuzzyPlural(single) {
  var result = single.replace(/o/g, 'e');  
  if( single === 'kangaroo'){
    result += 'se';
  }
  return result; 
}

var words = ["foot", "goose", "moose", "kangaroo"];
console.log(words.map(fuzzyPlural));

// ["feet", "geese", "meese", "kangareese"]

很炫酷的樣子嘛。

話說Jquery也有個map(),這兩者有啥不同嗎?

JQuery map()

定義和用法

map() 把每個元素通過函數(shù)傳遞到當(dāng)前匹配集合中,生成包含返回值的新的 jQuery 對象。

語法

.map(callback(index,domElement))

參數(shù)

callback(index,domElement)

描述

對當(dāng)前集合中的每個元素調(diào)用的函數(shù)對象。

對比一下上下這倆解釋,差不多嘛(???)就是JQ中不返回數(shù)組本身罷了。

Array.prototype.map()

概述

map() 方法返回一個由原數(shù)組中的每個元素調(diào)用一個指定方法后的返回值組成的新數(shù)組。

語法

array.map(callback[, thisArg])

參數(shù)

  • callback

原數(shù)組中的元素經(jīng)過該方法后返回一個新的元素。

  • currentValue

callback 的第一個參數(shù),數(shù)組中當(dāng)前被傳遞的元素。

  • index

callback 的第二個參數(shù),數(shù)組中當(dāng)前被傳遞的元素的索引。

  • array

callback 的第三個參數(shù),調(diào)用 map 方法的數(shù)組。

  • thisArg

執(zhí)行 callback 函數(shù)時 this 指向的對象。

描述

  • map 方法會給原數(shù)組中的每個元素都按順序調(diào)用一次 callback 函數(shù)。callback 每次執(zhí)行后的返回值組合起來形成一個新數(shù)組。 callback 函數(shù)只會在有值的索引上被調(diào)用;那些從來沒被賦過值或者使用 delete 刪除的索引則不會被調(diào)用。
  • callback 函數(shù)會被自動傳入三個參數(shù):數(shù)組元素,元素索引,原數(shù)組本身。
  • 如果 thisArg 參數(shù)有值,則每次 callback 函數(shù)被調(diào)用的時候,this 都會指向 thisArg 參數(shù)上的這個對象。如果省略了 thisArg 參數(shù),或者賦值為 null 或 undefined,則 this 指向全局對象 。
  • map 不修改調(diào)用它的原數(shù)組本身(當(dāng)然可以在 callback 執(zhí)行時改變原數(shù)組)。
  • 當(dāng)一個數(shù)組運行 map 方法時,數(shù)組的長度在調(diào)用第一次 callback 方法之前就已經(jīng)確定。在 map 方法整個運行過程中,不管 callback 函數(shù)中的操作給原數(shù)組是添加還是刪除了元素。map 方法都不會知道,如果數(shù)組元素增加,則新增加的元素不會被 map 遍歷到,如果數(shù)組元素減少,則 map 方法還會認(rèn)為原數(shù)組的長度沒變,從而導(dǎo)致數(shù)組訪問越界。如果數(shù)組中的元素被改變或刪除,則他們被傳入 callback 的值是 map 方法遍歷到他們那一刻時的值。

那今天就寫到這啦。

晚安么么噠(?′?`*)?

補一句:自己寫完看別人的代碼,感慨萬千,寫法千千萬啊( ̄(エ) ̄)ゞ

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容