/**
* @description [实现一个列表,用于流程控制]
* @param [Array] initalData
*/
class CList {
constructor(initalData) {
// 列表长度
this.size = initalData ? initalData.length : 0
// 列表当前位置
this.pos = 0
// 列表容器
this.dataStorage = initalData || []
}
get curPos() { return this.pos } // 返回列表的当前位置
get hasPrev() { return this.pos > 0 } // 是否存在上一个位置的元素
get hasNext() { return this.pos < this.size } // 是否存在下一个位置的元素
get curEle() { return this.dataStorage[this.pos] } // 返回列表当前位置的元素
front = () => (this.pos = 0) // 将列表的当前位置移动到第一个元素
end = () => (this.pos = this.size - 1) // 将列表的当前位置移动到最后一个元素
prev = () => this.pos-- // 将当前位置前移一个元素
next = () => this.pos < this.size && this.pos++ // 将当前位置后移一位
moveTo = position => (this.pos = position) // 将列表的当前位置移动到指定位置
append = ele => { // 往数组末端添加一个元素
this.dataStorage[this.size++] = ele
}
find = (ele) => { // 查找某个元素的下标,存在则返回下标,不存在返回-1
for (let i = 0; i < this.size; i++) {
if (ele === this.dataStorage[i]) {
return i
}
}
return -1
}
insertBefore = (ele, before) => { // 在某个元素之前插入新元素
const indexPos = this.find(before)
if (indexPos > -1) {
this.dataStorage.splice(before, 0, ele)
this.size++
return true // 插入成功返回true
} else {
return false // 插入失败返回false
}
}
clear = () => { // 清空列表
this.dataStorage = []
this.size = 0
}
remove = ele => { // 从列表中移除某个元素
const indexPos = this.find(ele)
const res = this.dataStorage.splice(indexPos, 1)
if (res.length > -1) {
this.size--
return true
}
return false
}
}
const myList = new CList([1,2,3])
console.log(myList.curPos)
myList.next()
console.log(myList.curPos)
myList.prev()
console.log(myList.curPos)
console.log(myList.hasPrev)
console