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

資訊專欄INFORMATION COLUMN

JavaScript實(shí)現(xiàn)的List(集合)類

Zack / 1789人閱讀

摘要:引言在后端語言如中,一般具有類型,它是一種集合類型,可以放置某個(gè)類型的數(shù)據(jù)它與數(shù)組類似,但是相對(duì)于數(shù)組,它又會(huì)有很多更加便捷的,如等方法中是沒有原生的支持類型的,所以大家在想要使用的時(shí)候,都會(huì)去自己封裝一個(gè)類,然后去實(shí)現(xiàn)它,下面我也給出一種

引言

在后端語言(如C#、Java)中,一般具有List類型,它是一種集合類型,可以放置某個(gè)類型的數(shù)據(jù);它與數(shù)組(Array)類似,但是相對(duì)于數(shù)組,它又會(huì)有很多更加便捷的API,如:add、remove、clear等方法;

JavaScript中是沒有原生的支持List類型的,所以大家在想要使用的時(shí)候,都會(huì)去自己封裝一個(gè)類,然后去實(shí)現(xiàn)它,下面我也給出一種實(shí)現(xiàn)方式,這個(gè)實(shí)現(xiàn)滿足了基本的API,而且是在JS Array類型的基礎(chǔ)上擴(kuò)展的,也可以在它上面使用Array的方法,另外一大 亮點(diǎn) 是可以直接引用length屬性獲得集合的元素個(gè)數(shù)。

代碼實(shí)現(xiàn)
//兼容IE8-,為Array原型添加indexOf方法;
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (item) {
        var index = -1;
        for (var i = 0; i < this.length; i++) {
            if (this[i] === item) {
                index = i;
                break;
            }
        }
        return index;
    }
}

//List類實(shí)現(xiàn)
var List = function (args) {
    var self = this;

    if (List.isArray(args)) {
        self = args;
    }
    self.constructor = List;
    //向集合追加新元素
    self.add = function (item) {
        self.push(item);
        return self;
    };
    //在指定索引處插入新元素
    self.insert = function (index, item) {
        self.splice(index, 0, item);
        return self;
    };
    //刪除元素,僅刪除第一個(gè)索引處的元素
    self.remove = function (item) {
        var index = self.indexOf(item);
        if (index != -1) {
            return self.splice(index, 1)[0];
        } else {
            return undefined;
        }
    };
    //刪除元素,如果元素在多個(gè)索引處存在,則全部刪除
    self.removeAll = function (item) {
        var result = [];
        var removeItem = undefined;
        do {
            removeItem = self.remove(item);
            if (removeItem !== undefined) {
                result.push(removeItem);
            }
        } while (removeItem !== undefined);
        return result;
    };
    //根據(jù)index刪除元素
    self.removeAt = function (index) {
        if (index != -1) {
            return self.splice(index, 1)[0];
        } else {
            return undefined;
        }
    };
    //判斷元素是否包含在集合中
    self.contains = function (item) {
        return self.indexOf(item) != -1;
    };
    //清空集合的所有元素
    self.clear = function () {
        return new List(self.splice(0, self.length));
    };
    self.size = function () {
        return self.length;
    };

    if (List.isArray(args)) {
        return self;
    } else if (arguments.length > 0) {
        for (var i = 0; i < arguments.length; i++) {
            self.add(arguments[i]);
        }
    }
};
List.isArray = Array.isArray || function (target) {
    return Object.prototype.toString.call(target) === "[object Array]";
};

/*下面這段代碼是關(guān)鍵,它設(shè)定了List類的原型是Array的原型(繼承關(guān)系),所以List類也同樣擁有Array的特征*/
List.prototype = Array.prototype;
改進(jìn)

這段代碼還是有改進(jìn)的空間的,就是還可以添加一些其他的便捷方法,不過我就先實(shí)現(xiàn)到這里,后續(xù)的改進(jìn)我會(huì)更新這段代碼。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/78415.html

相關(guān)文章

  • Immutable.js 初識(shí)

    摘要:文章博客地址所創(chuàng)建的數(shù)據(jù)有一個(gè)迷人的特性數(shù)據(jù)創(chuàng)建后不會(huì)被改變。是的基類,使用該類時(shí)需要至少繼承其子類中的一個(gè)??偨Y(jié)所提供的和固有的各有優(yōu)勢,未來有可能制定一套原生的規(guī)范,在這之前,是一個(gè)不錯(cuò)的選擇。參考資料官方文檔 文章博客地址:http://pinggod.com/2016/Immutable/ Immutable.js 所創(chuàng)建的數(shù)據(jù)有一個(gè)迷人的特性:數(shù)據(jù)創(chuàng)建后不會(huì)被改變。我們使用 ...

    Olivia 評(píng)論0 收藏0
  • [譯] Java 8 Nashorn 教程

    摘要:未來的主要發(fā)布基于。在中調(diào)用函數(shù)支持從代碼中直接調(diào)用定義在腳本文件中的函數(shù)。下面的函數(shù)稍后會(huì)在端調(diào)用為了調(diào)用函數(shù),你首先需要將腳本引擎轉(zhuǎn)換為。調(diào)用函數(shù)將結(jié)果輸出到,所以我們會(huì)首先看到輸出。幸運(yùn)的是,有一套補(bǔ)救措施。 原文:Java 8 Nashorn Tutorial 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 這個(gè)教程中,你會(huì)通過簡單易懂的代碼示例,來了解Nashorn Ja...

    _ivan 評(píng)論0 收藏0
  • 從觀察者模式到迭代器模式系統(tǒng)講解 RxJS Observable(一)

    摘要:是的縮寫,起源于,是一個(gè)基于可觀測數(shù)據(jù)流結(jié)合觀察者模式和迭代器模式的一種異步編程的應(yīng)用庫。是基于觀察者模式和迭代器模式以函數(shù)式編程思維來實(shí)現(xiàn)的。學(xué)習(xí)之前我們需要先了解觀察者模式和迭代器模式,還要對(duì)流的概念有所認(rèn)識(shí)。 RxJS 是 Reactive Extensions for JavaScript 的縮寫,起源于 Reactive Extensions,是一個(gè)基于可觀測數(shù)據(jù)流 Stre...

    notebin 評(píng)論0 收藏0
  • 集合數(shù)據(jù)處理(C#、JavaScript 和 Java)

    摘要:系列公用委托都用于委托帶有返回值的的方法,所有都是最后一個(gè)參數(shù)代表返回值類型。的字面對(duì)象據(jù)稱也是哈希實(shí)現(xiàn)。 Java 丟了好多年,最近在揀起來,首先當(dāng)然是了解這么多年來它的變化,于是發(fā)現(xiàn)了 Java 8 的java.util.stream。在學(xué)習(xí)和試驗(yàn)的過程中,相比較于 C# 和 javascript,有那么些心得,作文以記之。 早些時(shí)間寫過一篇《ES6 的 for..of 和 Ge...

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

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

0條評(píng)論

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