派生自 wuyushui/SewerAndRainNetwork

陈泽平
2021-05-20 d7c50f6207f0f27f4c20aa96f75b7c0b610b2b23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
class List {
  constructor () {
    this.dataSouce = []
  }
 
  add (index, element) {
    if (element.indexOf(',') > 0) {
      const arr = element.split(',')
      for (const k in arr) {
        if (!this.contains(element)) {
          this._addElement(index, arr[k])
        }
      }
    } else if (!this.contains(element)) {
      this._addElement(index, element)
    }
  }
 
  _addIndex (index, element) {
    const newArr = []
    for (var i = this.dataSouce.length - 1; i > index - 1; i--) {
      newArr[i + 1] = this.dataSouce[i]
    }
    newArr[index] = element
    this.dataSouce = newArr
  }
 
  _addElement (index, element) {
    if (!index) {
      this.addEnd(element)
    } else if (index >= this.dataSouce.length) {
      this.addEnd(element)
    } else if (index === 1) {
      this.addFront(element)
    } else {
      this._addIndex(index, element)
    }
  }
 
  /**
    * 在列表的末尾添加新元素
    * @param {*} element 要添加的元素
    */
  addEnd (element) {
    if (!this.contains(element)) {
      this.dataSouce[this.dataSouce.length] = element
    }
  }
 
  /**
    * 在列表头部添加新元素
    * @param {*} element
    * @param {*} after
    */
  addFront (element) {
    if (!this.contains(element)) {
      this._addIndex(0, element)
    }
  }
 
  /**
     * 在列表中移除一个元素
     * @param {*} element 要删除的元素
     */
  remove (element) {
    // 查找当前元素的索引
    const index = this.dataSouce.indexOf(element)
    if (index >= 0) {
      this.dataSouce.splice(index, 1)
      return true
    }
    return false
  }
 
  /**
     * 判断给定的值是否在列表中
     */
  contains (element) {
    return this.dataSouce.indexOf(element) > -1
  }
 
  /**
     * 清楚列表中的元素
     */
  clear () {
    delete this.dataSouce
    this.dataSouce = []
  }
 
  /**
     * 列表的长度
     */
  length () {
    return this.dataSouce.length
  }
 
  join (comma) {
    this.removeBlank()
    return this.dataSouce.join(comma)
  }
 
  removeBlank () {
    const arr = this.dataSouce
    for (const k in arr) {
      if (!arr[k]) {
        this.dataSouce.splice(k, 1)
      }
    }
  }
}
 
export default List