近期CodewarsJS算法總結(jié)

前一段時間在codewars上做了一些Javascript的算法磕昼,主要是和數(shù)組方法和正則表達(dá)式有關(guān)服傍,寫篇博客來記錄一下钱雷,否則這里面包含的知識真的忘得太快了。吹零。罩抗。


## 1. Your order,please.

給定一段順序錯誤的字符串灿椅,字符串里每個單詞都包含一個數(shù)字代表著這個單詞在句子中正確的位置套蒂,返回排序后的字符串。

function order(words){

? return words.split(' ').sort(function(a, b){? ?

? ? return a.match(/\d/) - b.match(/\d/); }).join(' ');`sort(function(a,b){?

? ? ? return a - b;})

sort中的比較函數(shù)茫蛹,可以決定在排好序的數(shù)組中兩個參數(shù)的位置操刀。如果要a在前則要返回一個負(fù)數(shù)(升序排列),反之要返回正數(shù)(降序排列)婴洼。

## 2.Where my anagrams at?

在數(shù)組中找到一個元素骨坑,擁有和字符串完全相同的字母。

function anagrams(word, words) {?

? word = word.split('').sort().join('');?

? return words.filter(function(v) {

? ? return word == v.split('').sort().join('');});}

`filter()`返回一個滿足回調(diào)函數(shù)的新數(shù)組

### 3.Vasya - Clerk

一隊人在電影院門口排隊買票柬采,他們手上有25,50,100三種紙幣欢唾,你作為售票員一開始沒有錢。寫一個函數(shù)判斷是否你有足夠的零錢把票賣給每一個人挺有意思的一道題粉捻,要記住你只有三種面值的紙幣礁遣,所以需要把你收到的25 50 100紙幣的個數(shù)分別記錄。>

function tickets(peopleInLine) {

? var bills = [0, 0, 0];

? for (var i = 0; i < peopleInLine.length; i++) {

? ? switch (peopleInLine[i]) {

? ? ? case 25 : bills[0] ++ break

? ? ? case 50 : bills[0] ?-- ?bills[1] ++ break

? ? ? case 100 : bills[1] ? bills[1]-- : bills[0] -= 2bills[0] -- break

}

? ? if (bills[0] < 0) {return 'NO'}}return 'YES'

## 4.Triple trouble

給你兩串?dāng)?shù)字杀迹,若滿足:第一串中有一個數(shù)字出現(xiàn)三次亡脸,第二串中那個同樣的數(shù)字也出現(xiàn)了兩次就返回true


?function tripledouble(num1, num2) {?

? for (let i = 0; i < 10; i++) {? ?

? ? if (new RegExp(\`${i}{3}\`).test(num1) && new RegExp(\`${i}{2}\`).test(num2)) {? ? ?

? ? ? return 1;? ?

? ? }?

? }?

return 0;

}


RegExp(`${i}{3}`)

RegExp("n{X}") n{X,}?

量詞匹配包含 X 個 n 的序列的字符串押搪。es6表達(dá)式模板字符串(template string)是增強(qiáng)版的字符串树酪,用反引號(`)標(biāo)識。它可以當(dāng)作普通字符串使用大州,也可以用來定義多行字符串续语,或者在字符串中嵌入變量(感覺有點像JSP里的EL表達(dá)式呢)。test() 方法用于檢測一個字符串是否匹配某個模式.如果字符串 string 中含有與 RegExpObject 匹配的文本厦画,則返回 true疮茄,否則返回 false。所以這里的語句 `RegExp(\`${i}{3}\`).test(num1)就是在num1這個字符串中看是否有3個i(1-10)~


## 5.Equal Sides Of An Array

找出使數(shù)組呈現(xiàn)中心對稱的那個元素([1,2,3,4,3,2,1] => 4)中心對稱的那個元素左右兩邊必然相等根暑,利用這個特點就可以了力试。

?function findEvenIndex(arr){?

? for(var i=1; ia+b) === arr.slice(i+1).reduce((a, b) =>? a+b)) {

? ? return i;

? ? }

? }

return -1;

}

arrayObject.slice(start,end) 方法可從已有的數(shù)組中返回選定的元素。`

arr.reduce([callback, initialValue])

reduce() 方法接收一個函數(shù)作為累加器(accumulator)排嫌,數(shù)組中的每個值(從左到右)開始縮減畸裳,最終為一個值。

參數(shù)

callback 執(zhí)行數(shù)組中每個值的函數(shù)淳地,包含四個參數(shù):

previousValue //上一次調(diào)用回調(diào)函數(shù)返回的值怖糊,或者是提供的初始值(initialValue)

currentValue //數(shù)組中當(dāng)前被處理的元素

currentIndex //當(dāng)前被處理元素在數(shù)組中的索引, 即currentValue的索引.如果有initialValue初始值, 從0開始.如果沒有從1開始.

array //調(diào)用 reduce 的數(shù)組

initialValue //可選參數(shù), 作為第一次調(diào)用 callback 的第一個參數(shù)帅容。

reduce`為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù),不包括數(shù)組中被刪除或從未被賦值的元素伍伤,接受四個參數(shù):

previousValu //上一次值

currentValue //當(dāng)前值

currentIndex //當(dāng)前值的索引

array 數(shù)組

### reduce是如何工作的

例如執(zhí)行下面的代碼

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){

? return previousValue + currentValue;

});

? ?| ? ? ? ? ? ? ? ? ? ? ?| previousValue? | currentValue | index ?|return value|

? ?| ------ ? ? ? ? ? ? ?| ----- ? ? ? ? ? ? ? ? ?| ---- ? ? ? ? ? ? ? ?|---- ? ? ? ?|----

? ?| first call ? ? ? ? | 0 ? ? ? ? ? ? ? ? ? ? ?| 1 ? ? ? ? ? ? ? ? ? |? 1 ? ? ? ? ?| 1? ? ? ? ? |

? ?| second call ? ?| 1 ? ? ? ? ? ? ? ? ? ? | 2 ? ? ? ? ? ? ? ? ? ?|? 2 ? ? ? ? | 3? ? ? ? ? |

? ?| third? call ? ? ? | 3 ? ? ? ? ? ? ? ? ? ? ?| 3 ? ? ? ? ? ? ? ? ? |? 3 ? ? ? ? ?| 6? ? ? ? ? |

? ?| fourth call ? ? ?| 6 ? ? ? ? ? ? ? ? ? ? ?| 4 ? ? ? ? ? ? ? ? ? |? 4? | ? ? ? ?10? ? ? ? |

當(dāng)有`initialValue`時并徘,previousValue的初始值為`initialValue`,并且index從0開始回調(diào)

還可以用箭頭函數(shù)(es6新增)來寫callback

ES6允許用 =>?來寫函數(shù)

var f = v =>v` = `var f = function(v) {return v;};

當(dāng)參數(shù)有多個或者沒有時扰魂,要用小括號`()`包裹麦乞,如果箭頭函數(shù)的代碼塊部分多于一條語句,就要使用大括號`{}`將它們括起來劝评,并且使用return語句返回路幸。由于大括號被解釋為代碼塊,所以如果箭頭函數(shù)直接返回一個對象付翁,必須在對象外面加上括號简肴。

var sum = (num1, num2) => num1 + num2;等于

var sum = function(num1, num2) {

return num1 + num2;

};

返回對象

var getTempItem = id => ({ id: id, name: "Temp" });

總結(jié): 對那些數(shù)組方法還有正則的用法太不熟悉了..很多時候第一反應(yīng)都是用for做循環(huán),大一c留下的坑百侧。ES6以后要從頭到尾看一遍砰识,很有用的說。

博客地址:renkosky.github.io 同步更新哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佣渴,一起剝皮案震驚了整個濱河市辫狼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辛润,老刑警劉巖膨处,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砂竖,居然都是意外死亡真椿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門乎澄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來突硝,“玉大人,你說我怎么就攤上這事置济〗馇。” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵浙于,是天一觀的道長护盈。 經(jīng)常有香客問我,道長羞酗,這世上最難降的妖魔是什么腐宋? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上脏款,老公的妹妹穿的比我還像新娘围苫。我一直安慰自己,他們只是感情好撤师,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布剂府。 她就那樣靜靜地躺著,像睡著了一般剃盾。 火紅的嫁衣襯著肌膚如雪腺占。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天痒谴,我揣著相機(jī)與錄音衰伯,去河邊找鬼。 笑死积蔚,一個胖子當(dāng)著我的面吹牛意鲸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尽爆,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怎顾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漱贱?” 一聲冷哼從身側(cè)響起槐雾,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幅狮,沒想到半個月后募强,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡崇摄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年擎值,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片配猫。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡幅恋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泵肄,到底是詐尸還是另有隱情,我是刑警寧澤淑翼,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布腐巢,位于F島的核電站,受9級特大地震影響玄括,放射性物質(zhì)發(fā)生泄漏冯丙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胃惜。 院中可真熱鬧泞莉,春花似錦、人聲如沸船殉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利虫。三九已至挨厚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間糠惫,已是汗流浹背疫剃。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留硼讽,地道東北人巢价。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像固阁,于是被迫代替她去往敵國和親蹄溉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.什么叫做設(shè)計模式(基本概念) 在面向?qū)ο筌浖O(shè)計過程中您炉,針對問題進(jìn)行簡潔而優(yōu)雅的一種解決方案 設(shè)計模式是在某種...
    Jianshu9527閱讀 341評論 0 3
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗柒爵。 張土汪:刷leetcod...
    土汪閱讀 12,745評論 0 33
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評論 0 4
  • 博爾赫斯曾說過:我心里一直在暗暗設(shè)想,天堂應(yīng)該是圖書館的模樣赚爵。 今天去女兒幼兒園參加親子閱讀活動之后棉胀,我覺得一輩子...
    c5de959d631b閱讀 1,104評論 0 4
  • 果然,直到現(xiàn)在也沒有一個人看我的日記哈冀膝。我既覺得好唁奢,也覺得不好。不好當(dāng)然在于自己寫的東西窝剖,任哪個人都想聽到別人的評...
    街亭盧旺達(dá)閱讀 82評論 0 0