摘要:列表時(shí)一組有序的數(shù)據(jù)結(jié)構(gòu),每個(gè)列表中的數(shù)據(jù)項(xiàng)稱為元素。訪問元素列表不用關(guān)系底層的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)向列表添加元素時(shí),索引值會(huì)改變,而迭代器的訪問方式不會(huì)改變?yōu)樵L問列表里的元素提供了統(tǒng)一的方式使用迭代器訪問
列表時(shí)一組有序的數(shù)據(jù)結(jié)構(gòu),每個(gè)列表中的數(shù)據(jù)項(xiàng)稱為元素。不包含任何元素的列表為空列表,可以在列表的末尾append一個(gè)元素,也可以在列表中指定位置insert一個(gè)元素,關(guān)于列表的抽象數(shù)據(jù)類型的定義如下:
屬性或方法 | 描述 |
---|---|
listSize(屬性) | 列表的元素個(gè)數(shù) |
pos(屬性) | 列表中的當(dāng)前位置 |
length(方法) | 返回列表中元素的個(gè)數(shù) |
clear(方法) | 清空列表中的所有元素 |
toString(方法) | 返回列表中字符串形式 |
getElement(方法) | 返回當(dāng)前位置的元素 |
insert(方法) | 在列表指定位置后插入新元素 |
append(方法) | 在列表末尾插入新元素 |
remove(方法) | 刪除列表中的元素 |
contains(方法) | 判斷列表中是否存在給定值 |
front(方法) | 將列表中當(dāng)前位置移動(dòng)到第一個(gè) |
end(方法) | 將列表中當(dāng)前位置移動(dòng)到最后一個(gè) |
prev(方法) | 將當(dāng)前位置前移一位 |
next(方法) | 將當(dāng)前位置后移一位 |
hasNext(方法) | 判斷是否有后一位 |
hasPrev(方法) | 判斷是否有前一位 |
currPos(方法) | 返回列表的當(dāng)前位置 |
moveTo(方法) | 移動(dòng)當(dāng)前位置至指定位置 |
下面直接用代碼實(shí)現(xiàn)已列表類
// 為了簡(jiǎn)便,直接將方法放入對(duì)象中。最好時(shí)將方法放在prototype對(duì)象中。 function List() { this.listSize = 0; this.pos = 0; this.dataStore = []; this.clear = clear; this.toString = toString; } List.prototype.append = function(ele) { this.dataStore[this.listSize++] = ele; //添加一個(gè)元素并將listSize加一 } List.prototype.remove = function(ele) { var pos = this.find(ele); if(pos > -1) { this.dataStore.splice(pos,1); this.listSize--; return true; } return false; } List.prototype.find = function(ele) { for(var i = 0; i < this.dataStore.length; i++) { if(this.dataScore[i] === ele) { return i; } } return -1; } List.prototype.length = function() { return this.listSize; } List.prototype.toString = function() { return this.dataStore; } List.prototype.insert = function(ele,afterEle) { var insertPos = this.find(afterEle); if(insertPos !== -1) { this.dataStore.splice(insertPos+1,0,ele); this.listSize++; return true; } return false; } List.prototype.clear = function() { this.dataStore.length = 0; this.listSize = this.pos = 0; } List.prototype.contains = function(ele) { for(var i = 0; i < this.dataStore.length; i++) { if(this.dataScore[i] === ele) { return true; } } return false; } List.prototype.front = function() { this.pos = 0; } List.prototype.end = function() { this.pos = this.listSize - 1; } List.prototype.prev = function() { if(!this.pos) { this.pos--; } } List.prototype.next = function() { if(this.pos < this.listSize) { this.pos++; } } List.prototype.currPos = function() { return this.pos; } List.prototype.moveTo = function(pos) { return this.pos = pos; } List.prototype.getElement = function() { return this.dataStore[this.pos]; } List.prototype.hasNext = function() { return this.pos=0; }
這樣列表的js現(xiàn)實(shí)就完成了。其中front(),end(),prev(),next()方法就實(shí)現(xiàn)了List類的一個(gè)迭代器。使用迭代器訪問和數(shù)組索引相比,有以下的一些優(yōu)點(diǎn)。
訪問元素列表不用關(guān)系底層的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)
向列表添加元素時(shí),索引值會(huì)改變,而迭代器的訪問方式不會(huì)改變
為訪問列表里的元素提供了統(tǒng)一的方式
// 使用迭代器訪問 var test = new List() test.append("Jack"); test.append("Rose") for(test.front(); test.hasNext(); test.next()) { console.log(test.getElement()) // Jack //Rose }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99224.html
摘要:實(shí)現(xiàn)列表動(dòng)態(tài)無限滾動(dòng)問題在開發(fā)頁面工程中,經(jīng)常會(huì)遇到滾動(dòng)列表當(dāng)實(shí)際需要顯示的內(nèi)容寬度或高度超過容器的寬度或高度時(shí),設(shè)置當(dāng)滾動(dòng)列表中的內(nèi)容比較少時(shí),我們可以一次性加載所有的內(nèi)容到列表容器中顯示。 JS+HTML實(shí)現(xiàn)列表動(dòng)態(tài)無限滾動(dòng) 問題 在HTML開發(fā)頁面工程中,經(jīng)常會(huì)遇到滾動(dòng)列表-當(dāng)實(shí)際需要顯示的內(nèi)容寬度或高度超過容器的寬度或高度時(shí),設(shè)置CSS overflow-x:auto;...
摘要:實(shí)現(xiàn)列表動(dòng)態(tài)無限滾動(dòng)問題在開發(fā)頁面工程中,經(jīng)常會(huì)遇到滾動(dòng)列表當(dāng)實(shí)際需要顯示的內(nèi)容寬度或高度超過容器的寬度或高度時(shí),設(shè)置當(dāng)滾動(dòng)列表中的內(nèi)容比較少時(shí),我們可以一次性加載所有的內(nèi)容到列表容器中顯示。 JS+HTML實(shí)現(xiàn)列表動(dòng)態(tài)無限滾動(dòng) 問題 在HTML開發(fā)頁面工程中,經(jīng)常會(huì)遇到滾動(dòng)列表-當(dāng)實(shí)際需要顯示的內(nèi)容寬度或高度超過容器的寬度或高度時(shí),設(shè)置CSS overflow-x:auto;...
摘要:注此項(xiàng)目純屬個(gè)人瞎搞,正常下單請(qǐng)選擇餓了么官方客戶端。目前下單功能已經(jīng)實(shí)現(xiàn),下單功能完全采用官網(wǎng)真實(shí)數(shù)據(jù),可以控制官網(wǎng)發(fā)短信或者打電話到指定的手機(jī)號(hào)碼,下單后可以在手機(jī)中查看并且付款。 前言 vue2的發(fā)布后自己也研究了一段時(shí)間,奈何公司的技術(shù)棧是以react為主,沒有機(jī)會(huì)好好利用vue2去做一個(gè)完整的項(xiàng)目。雖然寫了幾個(gè)demo,但和寫一個(gè)完整的項(xiàng)目還是有很大差別的。于是自己想著用空余...
閱讀 3169·2023-04-25 18:54
閱讀 2667·2021-11-02 14:40
閱讀 3278·2021-09-23 11:58
閱讀 2492·2019-08-30 13:50
閱讀 1291·2019-08-29 12:46
閱讀 3180·2019-08-28 17:51
閱讀 735·2019-08-26 11:47
閱讀 956·2019-08-23 16:17