數(shù)據(jù)結(jié)構(gòu)與算法(一)

前言? 為什么前端需要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法

首先笔喉,算法是一個很抽象并且廣發(fā)的概念,我們生活中所做的很多事情都可以說是涉及到算法甥材。收拾房間的時候,選擇先收拾哪性含,在收拾哪洲赵。周末選擇還洗衣服還是先整理花草等等。 想把事情做好,就要在做事情之前先有所規(guī)劃叠萍,而寫代碼也是一樣芝发。

當(dāng)我們接到一個需求的時候,首先要做的就是對需求進(jìn)行梳理苛谷,對需求的梳理首先就是與產(chǎn)品確定需求是做什么的后德,哪些功能是可以實現(xiàn)的,哪些功能是很耗時的抄腔,還有一些是耗時并且效果也盡如人意瓢湃。還有一些是需要進(jìn)行技術(shù)調(diào)研的。

當(dāng)然對于前端很重要的還有就是交互方式赫蛇,要考慮的是產(chǎn)品和交互想要的效果绵患,能不能實現(xiàn),會不會出現(xiàn)什么問題悟耘,從技術(shù)的角度來給出建議落蝙,其次就是評估時間成本。

還有些需求看起來很簡單暂幼,但是實際業(yè)務(wù)場景很復(fù)雜筏勒。我們要和后臺確認(rèn)交互方式,哪些是接口實現(xiàn)的旺嬉,哪些需要前端進(jìn)行數(shù)據(jù)緩存管行,還有前置校驗。復(fù)雜的交互可能會大大的占用開發(fā)聯(lián)調(diào)時間邪媳,導(dǎo)致工時評估不準(zhǔn)確捐顷。會造成感工期造成的加班。

最近大家應(yīng)該都經(jīng)歷了或者聽說了雨效,經(jīng)濟低迷迅涮,市場行情不好,用同事的話概況就是徽龟,招人的公司80%都是外包叮姑,剩下的20%要求特別高,為什么呢据悔?首先因為失業(yè)人群在不斷的壯大传透,大量公司倒閉。20%的公司在吸收原來100%的人員屠尊,所以現(xiàn)在是甲方市場旷祸,公司當(dāng)然是擇優(yōu)錄取,首先就從學(xué)歷讼昆、履歷、背景來卡掉大部分人。

以前我也曾經(jīng)不服氣浸赫,說高中沒好好學(xué)習(xí)的人闰围,長大以后不一定就不優(yōu)秀。還記得那時候的cto說既峡,他們也知道羡榴,有些人也優(yōu)秀,但是211 985 中的優(yōu)秀的概率會更大运敢。限制了門檻校仑,節(jié)約了很多篩選的時間和成本。以前經(jīng)濟好的時候传惠,我從來沒有覺得自己比那些好學(xué)校的差很多迄沫,現(xiàn)在的現(xiàn)實告訴我,小時候好好學(xué)習(xí)還是很重要的卦方。

好了羊瘩,廢話就說到這里吧。上面大概是我決定好好做個人的前提盼砍,計劃從今天開始把數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)記錄一遍尘吗。希望大家共勉。

本文主要是基于數(shù)據(jù)結(jié)構(gòu)與算法書為原型加上自己的理解浇坐,如有不對的地方睬捶,望大家海涵。

本章節(jié)計劃在半個月內(nèi)更新完近刘,每天更新一章侧戴。

第一章 數(shù)組

2.1? 什么是數(shù)組,數(shù)組是特殊的對象

概念: 一個存儲元素的線性集合跌宛,元素可以通過索引來任意取值酗宋,索引通常是數(shù)字,用來計算元素之間存儲位置的偏移量疆拘。

首先數(shù)組不是js獨有的蜕猫,幾乎所有的編程語言都有數(shù)組,但是js的數(shù)組與其他語言的有所不同哎迄。js的數(shù)組是一種特殊的對象回右,用來表示偏移量的索引是該對象的屬性,索引可能是整數(shù)漱挚。因為js對象中的屬性必須是字符串翔烁,所以這些索引在內(nèi)部被轉(zhuǎn)換成字符串類型。由于數(shù)組在js中是一種特殊對象旨涝,所以性能上沒有其他語言中的高效蹬屹。

2.2 數(shù)組的使用

2.2.1 創(chuàng)建數(shù)組

方法一 字面量方式創(chuàng)建

空數(shù)組 var numbers = [];

不為空的數(shù)組 var numbers = [1,2,3,4,5] console.log(numbers.length)

方法二 構(gòu)造函數(shù)創(chuàng)建數(shù)組

var numbers = new Array(1,2,3,4,5);

只傳入一個參數(shù)的時候,表示數(shù)組的長度。

var numbers = new Array(20)

js的數(shù)組慨默,每一個值可以是不同的類型贩耐。如何判斷一個對象是不是數(shù)組呢?Array.isArray()

2.2.2 讀寫數(shù)組

通過循環(huán)給數(shù)組賦值

var nums = [];

for(var i =0; i<100;++i) {

nums[i] = i+1;

}

console.log(nums[0])

js的數(shù)組長度是可以任意增長的厦取,可以超出創(chuàng)建的長度潮太。

2.2.3 由字符串生成數(shù)組

這里涉及到一個常用知識點,字符串轉(zhuǎn)換成數(shù)組的方法虾攻。split() 那么它的工作原理是什么呢铡买?

var sentence = "the quick brown fox jumped over the lazy cat";

var words = sentence.split(" ");

for(var i =0;i<words.lemgth;++i) {

????console.log('word' + i + ":" + words[i]);

}

2.2.4 對數(shù)組的整體操作

1 整體賦值 將一個數(shù)組整體賦值給另一個數(shù)組。這里會涉及到數(shù)組是引用類型霎箍,直接賦值只是給數(shù)組增加了一個引用奇钞,改變數(shù)組兩個值都會改變。這種行為是淺拷貝朋沮,新數(shù)組依然指向原來的數(shù)組蛇券。那么怎樣才能實現(xiàn)深拷貝呢。通過循環(huán)賦值樊拓,逐項拷貝纠亚。

function copy (arr1,arr2) {

????for(let i=0;i<arr1.length;++i) {

????????arr2[i] = arr1[i];

????}

}

2.3 存取函數(shù)

概念: js提供了一組用來訪問數(shù)組元素的函數(shù),叫做存取函數(shù)筋夏,這些函數(shù)返回數(shù)據(jù)的某種變體蒂胞。

2.3.1查找元素

Array.indexOf(name)如果存在返回具體位置,如果不存在返回-1 条篷。indexOf()只返回第一個查找到的元素的位置骗随。lastIndexOf 返回元素中最后一個相同的索引。

2.3.2 數(shù)組轉(zhuǎn)換成字符串

join()和toString()

2.3.3 會生成新數(shù)組的方法

concat()? 連接多個數(shù)組創(chuàng)建新數(shù)組赴叹。返回值為新數(shù)組

splice() 截取部分創(chuàng)建新數(shù)組鸿染,splice()第一個參數(shù)是開始的索引,第二個參數(shù)是截取的個數(shù)乞巧,必須是數(shù)組涨椒,可以為0,只傳一個參數(shù)是從開始到數(shù)組結(jié)束的位置绽媒。還有第三個參數(shù)蚕冬,第二個以后都是要添加到數(shù)組的新元素。返回值為新數(shù)組

2.4 可變函數(shù)(會直接改變原數(shù)組的方法)

2.4.1 添加元素

將一個元素添加到數(shù)組末尾 push()返回值為添加的元素

將一個元素添加到數(shù)組開頭 unshift()可以一次性添加多個元素是辕。?返回值為添加的元素

2.4.2 刪除元素

從末尾刪除一個元素 pop()返回值為刪除的元素

從開頭刪除一個元素shift()返回值為刪除的元素

2.4.3 為數(shù)組排序

reverse() 數(shù)組順序翻轉(zhuǎn)囤热。字符串使用sort()會改變原數(shù)組,返回改變后的數(shù)組获三。

2.5 為迭代器方法

2.5.1??不生成新數(shù)組?

forEach()forEach 中間不能停止旁蔼,寫判斷符合條件后禁止是不生效的后面還會繼續(xù)執(zhí)行锨苏。不會改變原數(shù)組,也沒有返回值牌芋。 函數(shù)沒有返回值就是undefined z

every()接受返回布爾值的函數(shù)蚓炬,所有為真則為真松逊。

some() 接受布爾值函數(shù)躺屁,一個為真就為真。

reduce()接收一個函數(shù)经宏,返回一個值犀暑,可以用來求和。還可以將數(shù)組的元素連成一個長的字符串烁兰。

reduce(add) 是數(shù)字

reduce(add)

function add (total,current) {

????return total + cuttent

}?

function concat (string,current) {

????return string + cuttent

}?

2.5.2? 生成新數(shù)組?

map()和forEach()類似耐亏,map返回新數(shù)組.不改變原數(shù)組

filter() 和every()類似,filter() 返回一個新數(shù)組沪斟,不改變原數(shù)組


2.6? 二維和多維數(shù)組

二維數(shù)組是一種類似由行和列構(gòu)成的數(shù)據(jù)表格广辰。在js中創(chuàng)建二維數(shù)組,需要先創(chuàng)建一個數(shù)組主之,然后讓數(shù)組中的每一個元素也是一個數(shù)組择吊。

var twoArr = [];

var rows = 5;

for(let i=0;i<rows;++i) {
????twoArr[i] = [];
}

Array.matrix = function (numrows,numcols,initial) {

var arr = [];

????for(var i =0;i<numrows;++i) {

? ? ? ? var columns = [];

? ? ? ? for(var j =0;j<numcols;++j) {

? ? ? ? ? ? columns[j] = initial;

????????}

????arr[i] = columns;

????}

return arr;

}

var nums = Array.matrix(5,5,0)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市槽奕,隨后出現(xiàn)的幾起案子几睛,更是在濱河造成了極大的恐慌,老刑警劉巖粤攒,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所森,死亡現(xiàn)場離奇詭異,居然都是意外死亡夯接,警方通過查閱死者的電腦和手機焕济,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盔几,“玉大人晴弃,你說我怎么就攤上這事∥是罚” “怎么了肝匆?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長顺献。 經(jīng)常有香客問我旗国,道長,這世上最難降的妖魔是什么注整? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任能曾,我火速辦了婚禮度硝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寿冕。我一直安慰自己蕊程,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布驼唱。 她就那樣靜靜地躺著藻茂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玫恳。 梳的紋絲不亂的頭發(fā)上辨赐,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音京办,去河邊找鬼掀序。 笑死,一個胖子當(dāng)著我的面吹牛惭婿,可吹牛的內(nèi)容都是我干的不恭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼财饥,長吁一口氣:“原來是場噩夢啊……” “哼换吧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佑力,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤式散,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后打颤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暴拄,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年编饺,在試婚紗的時候發(fā)現(xiàn)自己被綠了乖篷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡透且,死狀恐怖撕蔼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秽誊,我是刑警寧澤鲸沮,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锅论,受9級特大地震影響讼溺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜最易,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一怒坯、第九天 我趴在偏房一處隱蔽的房頂上張望炫狱。 院中可真熱鬧,春花似錦剔猿、人聲如沸视译。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酷含。三九已至,卻和暖如春弄慰,著一層夾襖步出監(jiān)牢的瞬間第美,已是汗流浹背蝶锋。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工陆爽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扳缕。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓慌闭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親躯舔。 傳聞我的和親對象是個殘疾皇子驴剔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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