js实现Set

 1 class MySet {
 2     constructor(params) {
 3         if (typeof params[Symbol.iterator] !== 'function') {
 4           throw new TypeError('Set的参数不是一个可以迭代的对象')
 5         }
 6         this._data = []
 7         for (var item of params) {
 8           this.add(item)
 9         }
10     }
11 
12     //添加元素
13     add(data) {
14         if(!this.has(data)) {
15             this._data.push(data)
16         }
17     }
18     //判断是否含有该元素
19     has (data) {
20         for (let index = 0; index < this._data.length; index++) {
21           const element = this._data[index];
22           if(this.isEqual(element,data)) {
23             return true
24           }
25         }
26         return false
27     }
28     delete (data) {
29         for (let index = 0; index < this._data.length; index++) {
30             const element = this._data[index];
31             if(this.isEqual(data,element)) {
32                 this._data.splice(index, 1)
33                 return true
34             }
35         }
36         return false
37     }
38     forEach(callback) {
39         for (const item of this._data) {
40             callback(item, item, this)
41         }
42     }
    //加入生成器,使set实例对象可以被迭代
43 *[Symbol.iterator] () { 44 for(let item of this._data) { 45 yield item 46 } 47 } 48 clear () { 49 this._data = [] 50 } 51 /** 52 * 判断两个数是否相等 53 * @param {*} data1 54 * @param {*} data2 55 */ 56 57 isEqual(data1, data2) { 58 if(data1 === 0 && data2 === 0) { 59 return true 60 } 61 return Object.is(data1, data2) 62 } 63 }

 

posted @ 2020-02-02 00:22  那个村  阅读(603)  评论(0)    收藏  举报