很多人說前端沒有資料結構,這種說法是否準確

時間 2021-05-12 00:07:45

1樓:Jian Yang

理性講,資料結構和語言不具備強烈的關聯關係!

資料結構是一種理論知識,為了解決、抽象問題而將生成的各種資料的組裝,表現形式多種,不限於陣列等。

語言是一種應用工具,通過邏輯表達表現出人們使用的各種形式的產品,當然語言應用中的核心除了邏輯表達,就是對資料的處理,在資料的凝練和組裝上可以用資料結構等的理論知識來支撐。

這樣的結果就是語言中必然用到資料,差異性在於組合語言、高階語言等所支援的資料結構的複雜性不同而且;而對於高階語言,又在於人對於資料的抽象方式的能力不同。不能說很少用複雜的資料就沒有資料結構。

充分體現出」語言定論者「對語言認知的誤區,要麼是根本不了解前端語言,要麼自己在做前端語言程式設計中,過分關注了渲染和內容,而忽略了內容是通過資料傳遞和表達的,且資料的組裝也是多樣和複雜的。

2樓:

不說別的前端,我的前端同事,有後端傳map不知道怎麼接的,有列表需要的可以自己通過map(可能還不需要)記錄並取值的資料操作嫌麻煩,非讓後端在列表項多餘返回的。嚴重懷疑前端從來只做頁面,不處理資料。

3樓:知微

A:前端沒有資料結構。

B:前端沒有資料結構。

C:前端沒有資料結構。

D:前端沒有資料結構。

E:前端沒有資料結構。

我:摸了摸自己的良心,前端是有的,是有資料結構的,還特麼有演算法。

路人甲:那他們說沒有。

我:那我也不是他們呀。

4樓:寧逍遙

所有能夠湧現出有價值屬性的軟體開發工作都必然涉及到資料結構

前端開發也是能夠湧現出有價值屬性的軟體開發工作

所以前端開發也會有資料結構

5樓:風啊

你內容的理解是正確的,但是標題這種說法上錯誤的。

資料結構的本質是如何組織和儲存資料。從這個意義來講,哪怕是乙個簡單的整形變數,從概念中你也應該把它視為資料結構的一種特例,雖然這種特列在機內表示和關係表示中都非常簡單,或者說它不是教科書上的資料結構,因為它的結構性很弱,極端情況下就沒有結構性。但有了這種概念,你在程式設計中才不會隨心所欲地定義和修改變數,才會準確地選擇變數的型別,畢至到底是整型還是長整型,是否帶符號等?

在嵌入式中是否會多佔資源,或者根本就不夠容易溢位?我定義的這個變數是否多餘?與其它變數、常量、資料結構之間的關係是怎麼樣的?

引伸開來,資料結構涉及到的象集合、佇列、鍊錶、樹、圖等,這些概念在前端也是有的啊,也是需要清晰表示和傳達給中後端。

前端良好的結構表示會讓中後端的溝通和合作更舒服,在大型專案中,如果換成你是中後端的人願意接收散件呢還是願意接收編碼規範,檔案齊全的貨櫃?

6樓:一葉知秋

說這話的是什麼人?如果是員工,我開除他。

看見很多非常差的程式設計師,甚至1+2+...+100,人家給我寫99個加號。

這樣的人不需要資料結構

7樓:奔跑的蝸牛

如果說你們的前端是負責美工和頁面設計的,他說的也沒錯,在他看來前端確實只是展示的。如果你們的前端知道按F12,請拉出去祭天。

8樓:火星的弟弟是地球

肯定有資料結構啊,而且資料結構是最基本的必須掌握技能,像這種陣列,物件,本身是一種資料結構。哦對了還有棧,佇列,樹。等學下去,這些東西肯定要用到。

可以減輕服務負擔。等等很多東西好處不說了,

9樓:緋凡

就不滑稽了…顯然不準確,我也不是來杠說什麼沒有資料結構 V8 怎麼實現之類的,json 也是資料的一種結構之類的,我想對你說這種話的人更準確的diss應該是:他覺得前端實際業務中根本用不到平時刷題用的那些資料結構和演算法

那麼我就舉幾個例子:

樹:在前端用的總算多了吧,比如 dom tree,再比如 react 的元件樹,以及元件庫經常有的乙個檔案樹目錄的元件,夠接地氣了吧,還有諸如 immutable 等庫的實現原理也可以去了解了解。b 樹、紅黑樹啥的就別說了,以前做後端面試的時候才會考。

棧和佇列:就你平時用的 Array 不就是個典型例子,push,pop,shift,unshift,舉個具體點的例子,寫框架的時候要對巢狀的元件樹做依賴收集,假如需要根據元件的 instanceId 來儲存依賴,那麼首先深度優先執行元件樹(看,又是樹),父元件先收集,收集了一部分碰到了子元件,然而父元件仍未收集結束,這時候顯然就需要用到棧的特性,只要遇到子元件就入棧,收集完出棧,收集時始終取當前棧最後乙個值。佇列就更不用說了,比如 mobx 合併 action,在 nextTick flush 掉,就需要乙個 queue,或者 react setState,再或者 redux-saga 怎麼 keep 非同步任務池呢,例子實在是太多,業務中也多的是

map、set 這些就不說了吧

鍊錶:這個確實用的不算多,不過在某些特定複雜業務場景還是會用到,鍊錶的特性就是增刪快,比如雙向迴圈鍊錶,在某乙個已知條件下,可以做一些諸如查詢前乙個節點和後乙個節點相關資訊的操作(比陣列通過 index 要更方便)不需要知道 index,也更加語義化,比如我們業務裡面需要繪製一些圖形輪廓,輪廓由點和線組成,點和線之間有非常強的關聯關係,這時候就很適合用鍊錶

圖:這個更常用了,前面有些人也提到過一些了,首先圖狀的資料模型就很常見,就比如資料庫裡面的表,每張表都有諸如一對一,一對多,多對多等複雜關係,互相還有交叉,到前端這邊,普通 web 應用確實很多都是 json,但部分業務,比如我司業務(3D設計工具軟體)前端也需要維護這種複雜資料模型實時做修改。可能嚴格來說有的人覺得這不叫圖,那麼更複雜一些,有些單頁業務需要求乙個節點到另乙個節點的最短路徑,現在我要求前端實時計算並畫出來,每一條路徑上有權重,有的圖還是有向的,這時候前端很多操作根本不會經過後端,比如只在某些終結操作或全域性儲存的時候才和後端互動,就需要前端來做複雜演算法的實現了。

最後安利一下框架:

10樓:行者

對這種人,我只能說呵呵。

沒有資料結構,你資料怎麼組織。

你把前端的資料提交給後端的時候,你要按介面文件的格式去提交,這個合適就包含資料結構。

你說自己一股腦的全部給後端,讓後端自己處理,後端大概率會打死你,哈哈。

另外,現在的前端的任務更重了,有些可以前端幹的活都盡量放在前端了,這樣的情況下,沒有資料結構,你怎麼玩得轉。

11樓:

從個人的實踐來說,該輪到前端弄點演算法、資料結構了,而且以後可能越來越多。

我司採用的前後分離策略是,服務端直接暴露 Model,而且這個 Model 為了減少干預,盡可能的採用自動化處理,簡單來說就是規整、死板、弱智。那麼很多任務作就得前端來幹了,某些小規模的排序、交叉、查詢、轉換等等,逐步都轉移到前端,前端需要考慮什麼方式更快、「記憶體」占用更小;當然相應的,這個資料量一定不會很大,過大的統計、排序那一定是提前在服務端計算和索引好的。不管怎麼說,不能什麼都迴圈套迴圈那麼搞了,得動動腦子。

為什麼要這麼幹呢,一方面節省伺服器算力,為單機節省資源,省錢、省腦細胞;另一方面,需求變化太快,服務端以不變應萬變,只提供那些固定的、有明確規律的計算服務,對於一些量級不大、耗時不長的處理,前端直接幹了。產品基本也不懂後端的情況,怎麼折騰對後端影響都不大,也就不太容易把架構搞亂了;前端亂不到哪去,因為她是「終端」,元件間依賴較輕,大不了就廢棄重來嘛。

12樓:張伯通

估計是他本身水平有限,大部分時間寫前端的時候用不到或者沒想到用資料結構。

再加上以前js內建的沒有幾個現成封裝好的資料結構給他用,所以…前端和後端只是分工不同而已。

都是程式語言。

13樓:zdxhxh

diff演算法遍歷虛擬dom也需要dfs,而dfs是圖結構的知識雜湊錶可用於memoize演算法也可以實現快取你看vue–keepalive不就是這樣實現的

就因為是程式設計師所以不能知其然不知其所以然

所以,前端怎能不需要資料結構呢?

14樓:伊撒爾

我從沒有聽人說過類似的話,更別說很多人了……事實上我主要寫前端框架,前端框架就是對資料結構和演算法的合理安排比如在 fre 裡面:

非同步渲染,我使用了鍊錶迴圈去遍歷節點

優先順序排序,我使用了最小堆

refs 呼叫,使用了棧

還有各種佇列(updateQueue,commitQueue)等等同樣的,react 框架中,就非常多本來應該使用佇列的地方,他們用了很多鍊錶

所以本質上,前端框架其實就是資料結構的不同的設計與組合但是話又說回來,如果你讓我走 leetcode 的演算法題,我也做不出來

我熟練各種資料結構並不是說我能做出來固定的題目

15樓:謝然

準確個毛,我還見過有人說js不能寫演算法呢

如果js沒有資料結構,怎麼去做leetcode那些題目,然而leetcode的每個題目都可以用js解決

這些人想說的就是,js裡不能直接操作記憶體,沒有像c語言的那種直接控制記憶體的功能,所以不能有完全的控制能力,所以實現不了各種資料結構,簡直是搞笑,都懶得解釋

16樓:汪志成

這其實就是「前端例外」論的一部分,不管是想用來證明「前端不值一提」還是想證明「前端的地位不可替代」,都只能證明說這句話的人目光短淺。

不管什麼種類的程式設計師都首先是程式設計師。不排除少數特定的工種(比如切圖師)可能不需要資料結構,但是這不等於整個領域都沒有啊。

寫前端總不能不和陣列打交道吧?這就是資料結構。雜湊物件也是資料結構,DOM 樹也是資料結構。更不用說前端要用到的模型基本上都是資料結構了。

整天都在和資料結構打交道,還說前端沒有資料結構,這就是明目張膽的撒謊了。

為什麼很多人說學生物沒有什麼前途

館長 瀉藥!有,當然有前途!前途一 研究生轉碼農。前途二 研究生轉生信,再轉碼農。前途三 研究生轉生信,再轉資料分析統計,再轉碼農。 站在畢業的邊上回答一下你這個問題.生物為什麼很多人不願意學,第一,高產出,低收入的學科.很多實驗室的學生 以本人所在實驗室為例,國家農業重點實驗室,然並卵.實驗室裡師...

經常聽到很多人說 做人最重要的是開心 這種人生價值觀真的對嗎

透過現象洞察本質 我以前對此有懷疑,現在覺得是對的,不過快樂也分 高階快樂,和低階快樂,低階快樂比如打遊戲刷抖音,這些低階快樂容易得到,久了會厭倦,高階快樂,比如研究幾十年攻克了癌症,研究出雜交水稻,這種是極大的快樂,能快樂好久好久,所有人碰到你,都會讚許你,誇獎表揚你是乙個了不起的人,偉大的人,能...

感覺suv沒有轎車好開,但很多人總是說不如買suv,是因為外形大?

龍一 單純從個人角度出發 我是一直就喜歡大車 高的車的人 因為當時學車的時候,爸爸搞了一輛老款的陸地巡洋艦給我練車 之後考到駕照後,一下子就換成了別克Lacrosse,瞬間體會到了大車 非緊湊型suv 和轎車的區別 你開suv時,特別是較大款式時,其他車真的會比較讓你,不太敢插位 而且,開大車,看著...