寫在前頭
- 身為一個(gè)JS學(xué)渣徽千,每天都在冥思苦想怎么變成一個(gè)大師双抽,在看到“學(xué)一門后端語言闲礼,有助于進(jìn)階Js水平”這類話后,開始興沖沖地學(xué)習(xí)后端語言
(怎么說前端后端真的差很多啊(′?_?`)后端輸出好少嚶嚶嬰慎菲,暫時(shí)感受不到成就感的說)
(一天打漁锨并,一星期曬網(wǎng)中)
(認(rèn)真過一遍《JS高級(jí)程序設(shè)計(jì)》才是正途吧呀喂\(`0′)/)。
--------話說作為一枚小前端第煮,也應(yīng)該了解一些后端語言嚯!(? ??_??)?--------
- 言歸正傳撵摆,不知為啥雖然看不下那么厚一本《J高》台汇,但是還是要有點(diǎn)追求啊9赌拧牵素!
- 于是某天,我發(fā)現(xiàn)了Codewars!
- Codewars是啥笆呆?看標(biāo)題(? ̄▽ ̄)? 就是各類代碼的小測(cè)試小闖關(guān)啦
- 臥槽!搞起俄精!
好吧榕堰,那就搞起唄(*?▽?)
請(qǐng)聽題!
一圾旨、創(chuàng)建一個(gè)方法來接收數(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']
( ??Д?)?<
- 碎碎念部分:作為一個(gè)渣谣旁,第一個(gè)想法就是蔓挖,so easy馆衔,恩怨绣,先把值拆成兩部分拷获,第一個(gè)部分就是首字母啦,然后把它變成大寫噠赢笨,剩下都變成小寫噠驮吱,恩,直觀又簡(jiǎn)單桐筏!搞起呀拇砰!
- 涉及到的方法等:
-
toUpperCase()
轉(zhuǎn)換為大寫 -
toLowerCase()
轉(zhuǎn)換為小寫 -
charAt()
返回給定位置的單個(gè)字符串(從0個(gè)開始算就不說啦┐(‘~`;)┌) -
slice(3,7)
返回給定位置開始的字符串
(如果有兩個(gè)值牧氮,就是給定位置之間字符串瑰枫,這里給的就是返回第4~7這四位字符串)
(注意:slice()
計(jì)算位置包括空格饮寞,若要不包括教馆,要使用substring()
)
(我們這邊暫時(shí)用啥都可以啦,因?yàn)榻鹤蹋瑳]有空格嘛(≧?≦)/) - 我的代碼:
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()來傳遞字符串悲敷,然后寫錯(cuò)了一些代碼后德,結(jié)果就在數(shù)組末尾多了一個(gè)undefined
WHY!@碚拧!(?_?)
不過雾叭!終于通過了!(???)
然后暂幼,我就提交了移迫,再然后,就可以看到一些大師的代碼(#/鹰服。\#)
看完感覺寫了好多廢代碼的說揽咕,雖然通過了還是有點(diǎn)小問題亲善,看了別人的代碼以后自己改進(jìn)了一下。
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)該也可以用傳說中吊吊的正則,不過讼昆,這個(gè)暫時(shí)放后吧骚烧,不大懂不大懂。
- 先來個(gè)版本既峡,這是先都小寫再首字母大寫碧查,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;
}
- 再來個(gè)版本,倆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();
});
}
為什么這么短4荨!! _(:з」∠)_
容我仔細(xì)瞅瞅愿汰,哎喲喂~思路跟我一樣嘛((」?ヘ?)」這很正常吧)
看來我很有當(dāng)大神的潛質(zhì)嘛乐纸!(湊不要臉??)_
這么多人用map!醉了醉了醉了!
我要翻翻我的《J高》了(Σ(っ °Д °;)っ你剛剛寫代碼的時(shí)候不是一直在翻嗎B鸢稀D选)
⊙︿⊙沒找到
那就只好谷歌一下了。
這就是map() 的介紹啦疆拘。
打不開的我把相關(guān)介紹附在后面了(?′?`?)
看他們舉的例子就造了(map()
相當(dāng)于把數(shù)組的每個(gè)元素的值寂曹,以及索引隆圆,以及數(shù)組本身都傳了進(jìn)去)
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也有個(gè)map()旨涝,這兩者有啥不同嗎阶女?
JQuery map()
定義和用法
map() 把每個(gè)元素通過函數(shù)傳遞到當(dāng)前匹配集合中,生成包含返回值的新的 jQuery 對(duì)象衬鱼。
語法
.map(callback(index,domElement))
參數(shù)
callback(index,domElement)
描述
對(duì)當(dāng)前集合中的每個(gè)元素調(diào)用的函數(shù)對(duì)象憔杨。
對(duì)比一下上下這倆解釋,差不多嘛(???)就是JQ中不返回?cái)?shù)組本身罷了抛蚤。
Array.prototype.map()
概述
map() 方法返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。
語法
array.map(callback[, thisArg])
參數(shù)
-
callback
原數(shù)組中的元素經(jīng)過該方法后返回一個(gè)新的元素朋沮。
-
currentValue
callback 的第一個(gè)參數(shù)缀壤,數(shù)組中當(dāng)前被傳遞的元素塘慕。
-
index
callback 的第二個(gè)參數(shù),數(shù)組中當(dāng)前被傳遞的元素的索引条篷。
-
array
callback 的第三個(gè)參數(shù)蛤织,調(diào)用 map 方法的數(shù)組。
-
thisArg
執(zhí)行 callback 函數(shù)時(shí) this 指向的對(duì)象稚瘾。
描述
- map 方法會(huì)給原數(shù)組中的每個(gè)元素都按順序調(diào)用一次 callback 函數(shù)姚炕。callback 每次執(zhí)行后的返回值組合起來形成一個(gè)新數(shù)組。 callback 函數(shù)只會(huì)在有值的索引上被調(diào)用些椒;那些從來沒被賦過值或者使用 delete 刪除的索引則不會(huì)被調(diào)用掸刊。
- callback 函數(shù)會(huì)被自動(dòng)傳入三個(gè)參數(shù):數(shù)組元素忧侧,元素索引,原數(shù)組本身蚓炬。
- 如果 thisArg 參數(shù)有值肯夏,則每次 callback 函數(shù)被調(diào)用的時(shí)候犀暑,this 都會(huì)指向 thisArg 參數(shù)上的這個(gè)對(duì)象烁兰。如果省略了 thisArg 參數(shù),或者賦值為 null 或 undefined沪斟,則 this 指向全局對(duì)象 。
- map 不修改調(diào)用它的原數(shù)組本身(當(dāng)然可以在 callback 執(zhí)行時(shí)改變?cè)瓟?shù)組)主之。
- 當(dāng)一個(gè)數(shù)組運(yùn)行 map 方法時(shí)杀餐,數(shù)組的長(zhǎng)度在調(diào)用第一次 callback 方法之前就已經(jīng)確定朱巨。在 map 方法整個(gè)運(yùn)行過程中,不管 callback 函數(shù)中的操作給原數(shù)組是添加還是刪除了元素琼讽。map 方法都不會(huì)知道洪唐,如果數(shù)組元素增加凭需,則新增加的元素不會(huì)被 map 遍歷到,如果數(shù)組元素減少粒蜈,則 map 方法還會(huì)認(rèn)為原數(shù)組的長(zhǎng)度沒變枯怖,從而導(dǎo)致數(shù)組訪問越界。如果數(shù)組中的元素被改變或刪除肿轨,則他們被傳入 callback 的值是 map 方法遍歷到他們那一刻時(shí)的值蕊程。
那今天就寫到這啦。
晚安么么噠(?′?`*)?
補(bǔ)一句:自己寫完看別人的代碼槐沼,感慨萬千,寫法千千萬啊( ̄(エ) ̄)ゞ