亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)列表的JS實(shí)現(xiàn)

jsdt / 1511人閱讀

摘要:列表時(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

相關(guān)文章

  • JS+HTML實(shí)現(xiàn)列表動(dòng)態(tài)無限滾動(dòng)

    摘要:實(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;...

    Lorry_Lu 評(píng)論0 收藏0
  • JS+HTML實(shí)現(xiàn)列表動(dòng)態(tài)無限滾動(dòng)

    摘要:實(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;...

    BakerJ 評(píng)論0 收藏0
  • vue2 + vuex 高度還原 餓了么 App,與官方后臺(tái)真實(shí)數(shù)據(jù)交互,獲取商品信息,實(shí)現(xiàn)登陸、購(gòu)

    摘要:注此項(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)目還是有很大差別的。于是自己想著用空余...

    JeOam 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<