一组有序的数据集合,集合中的每个数据项叫做元素,可对这些数据项进行增删改查操作。
应用:存储数据,进行数据的简单查找和排序
实现:
class List {
constructor() {
this.elements = []
this.pos = 0 // 列表的当前位置
}
// 返回列表中元素的个数
get length() {
return this.elements.length
}
// 清空列表中的所有元素
clear() {
this.elements = []
}
// 在列表中查找某一元素
find(ele) {
return this.elements.indexOf(ele)
}
// 返回列表的字符串形式
toString() {
return this.elements.toString()
}
// 在现有元素后插入新元素
insert(after,ele) {
if (this.find(after) > -1) {
const index = this.find(after) + 1
this.elements.splice(index,ele)
return true
}
return false
}
// 给列表添加元素
append(ele) {
this.elements.push(ele)
}
// 从列表中删除元素
remove(ele) {
if (this.find(ele) > -1) {
this.elements.splice(this.find(ele),1)
return true
}
return false
}
// 返回列表的当前位置
currPos() {
return this.pos
}
// 返回当前位置的元素
getElement() {
return this.elements[this.pos]
}
// 将列表的当前位置设移动到第一个元素
front() {
this.pos = 0
}
// 将列表的当前位置移动到最后一个元素
end() {
this.pos = this.length - 1
}
// 将当前位置前移一位
prev() {
if (this.pos > 0) {
this.pos--
return this.getElement()
}
}
// 将当前位置后移一位
next() {
if (this.pos < this.length - 1) {
this.pos++
return this.getElement()
}
}
// 将当前位置移动到指定位置
moveTo(pos) {
if (pos >= 0 && pos < this.length) {
this.pos = pos
return this.getElement()
}
}
// 实现一个迭代器(Iterator),可以使用for...of...循环
/**
* next(): 返回 { value: all_type,done: Boolean }
* value: 列表中的某个值
* done: 标明迭代是否结束
*/
[Symbol.iterator]() {
this.pos = 0
return {
next: () => {
this.pos++
if (this.pos > this.length) {
return {
value: null,done: true
}
} else {
return {
value: this.elements[this.pos - 1],done: false
}
}
}
}
}
}
示例:
// test
var names = new List()
names.append('Clayton')
names.append('Raymond')
names.append('Cynthia')
names.append('Jennifer')
names.append('Bryan')
names.append('Danny')
names.insert('Cynthia','Hysunny')
console.log(names.toString()) // Clayton,Raymond,Cynthia,Hysunny,Jennifer,Bryan,Danny
console.log(names.currPos()) // 0
names.front()
console.log(names.getElement()) // Clayton
names.next()
console.log(names.getElement()) // Raymond
names.moveTo(4)
console.log(names.getElement()) // Bryan
names.remove('Bryan')
console.log(names.toString()) // Clayton,Danny
// 使用迭代器
for (var name of names) {
console.log(name)
}
// Clayton,Danny
names.clear()
console.log(names.length) // 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。