摘要:引言在后端語言如中,一般具有類型,它是一種集合類型,可以放置某個類型的數據它與數組類似,但是相對于數組,它又會有很多更加便捷的,如等方法中是沒有原生的支持類型的,所以大家在想要使用的時候,都會去自己封裝一個類,然后去實現它,下面我也給出一種
引言
在后端語言(如C#、Java)中,一般具有List類型,它是一種集合類型,可以放置某個類型的數據;它與數組(Array)類似,但是相對于數組,它又會有很多更加便捷的API,如:add、remove、clear等方法;
JavaScript中是沒有原生的支持List類型的,所以大家在想要使用的時候,都會去自己封裝一個類,然后去實現它,下面我也給出一種實現方式,這個實現滿足了基本的API,而且是在JS Array類型的基礎上擴展的,也可以在它上面使用Array的方法,另外一大 亮點 是可以直接引用length屬性獲得集合的元素個數。
代碼實現//兼容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類實現 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; }; //刪除元素,僅刪除第一個索引處的元素 self.remove = function (item) { var index = self.indexOf(item); if (index != -1) { return self.splice(index, 1)[0]; } else { return undefined; } }; //刪除元素,如果元素在多個索引處存在,則全部刪除 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; }; //根據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]"; }; /*下面這段代碼是關鍵,它設定了List類的原型是Array的原型(繼承關系),所以List類也同樣擁有Array的特征*/ List.prototype = Array.prototype;改進
這段代碼還是有改進的空間的,就是還可以添加一些其他的便捷方法,不過我就先實現到這里,后續的改進我會更新這段代碼。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78415.html
摘要:文章博客地址所創建的數據有一個迷人的特性數據創建后不會被改變。是的基類,使用該類時需要至少繼承其子類中的一個。總結所提供的和固有的各有優勢,未來有可能制定一套原生的規范,在這之前,是一個不錯的選擇。參考資料官方文檔 文章博客地址:http://pinggod.com/2016/Immutable/ Immutable.js 所創建的數據有一個迷人的特性:數據創建后不會被改變。我們使用 ...
摘要:未來的主要發布基于。在中調用函數支持從代碼中直接調用定義在腳本文件中的函數。下面的函數稍后會在端調用為了調用函數,你首先需要將腳本引擎轉換為。調用函數將結果輸出到,所以我們會首先看到輸出。幸運的是,有一套補救措施。 原文:Java 8 Nashorn Tutorial 譯者:飛龍 協議:CC BY-NC-SA 4.0 這個教程中,你會通過簡單易懂的代碼示例,來了解Nashorn Ja...
摘要:是的縮寫,起源于,是一個基于可觀測數據流結合觀察者模式和迭代器模式的一種異步編程的應用庫。是基于觀察者模式和迭代器模式以函數式編程思維來實現的。學習之前我們需要先了解觀察者模式和迭代器模式,還要對流的概念有所認識。 RxJS 是 Reactive Extensions for JavaScript 的縮寫,起源于 Reactive Extensions,是一個基于可觀測數據流 Stre...
摘要:系列公用委托都用于委托帶有返回值的的方法,所有都是最后一個參數代表返回值類型。的字面對象據稱也是哈希實現。 Java 丟了好多年,最近在揀起來,首先當然是了解這么多年來它的變化,于是發現了 Java 8 的java.util.stream。在學習和試驗的過程中,相比較于 C# 和 javascript,有那么些心得,作文以記之。 早些時間寫過一篇《ES6 的 for..of 和 Ge...
閱讀 2816·2021-11-18 10:02
閱讀 3676·2021-11-15 17:59
閱讀 2307·2021-09-06 15:00
閱讀 3346·2019-08-29 16:58
閱讀 1059·2019-08-26 10:34
閱讀 1582·2019-08-26 10:15
閱讀 1288·2019-08-26 10:11
閱讀 2715·2019-08-23 18:33