相关概念
1.列表是一组有序的数据。
2.每个列表中的数据项称为元素。
3.在 JavaScript 中,列表中的元素可以是任意数据类型。
4.列表中可以保存多少元素并没有事先限定,实际使用时元素的数量受到程序内存的限制。
5.不包含任何元素的列表称为空列表。
6.列表中包含元素的个数称为列表的 length。
7.底层储存数据的数据结构是数组。
代码
// 实现列表类
function List() {
this.listSize = 0 // 列表元素个数
this.pos = 0 // 列表的当前位置
this.dataStore = [] // 初始化一个空数组来保存列表元素
this.clear = clear // 清空列表所有元素
this.find = find //
this.toString = toString // 返回列表的字符串形式 **返回值**
this.insert = insert // 在现有元素后插入新元素
this.append = append // 在列表末尾添加新元素
this.remove = remove // 从列表中删除元素
this.front = front //
this.end = end
this.prev = prev // 讲当前位置后移一位
this.next = next // 将当前位置前移一位
this.length = length // 返回列表元素个数 **返回值**
this.currPos = currPos // 返回列表的当前位置 **返回值**
this.moveTo = moveTo // 将当前位置移动到指定位置
this.getElement = getElement // 返回当前位置的元素 **返回值**
this.length = length
this.contains = contains
}
// append
// 在列表末尾添加element元素
function append (element) {
this.dataStore[this.listSize++] = element
}
// find
// 找到element元素返回位置i否则返回-1
function find(element) {
for (var i=0; i<this.dataStore.length; ++i) {
if (this.dataStore[i] == element) {
return i
}
}
return -1
}
// remove
// 删除element圆度 并更改列表长度 最后返回删除成功与否的布尔值
function remove (element) {
var foundAt = this.find(element)
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1)
--this.listSize
return true
}
return false
}
// length
// 返回列表的长度
function length () {
return this.listSize
}
// toString
// 直接返回字符串形式
function toString () {
return this.dataStore
}
// 测试代码一
var names = new List()
names.append('xx1')
names.append('xx2')
names.append('xx3')
console.log('第一个列表',names.toString()) // [xx1,xx2,xx3]
names.remove('xx2')
console.log( '第二个列表', names.toString()) // [xx1,xx3]
// insert
// 插入element元素至after后面 成功返回true 失败返回false
function insert (element, after) {
var insertPos = this.find(after)
if (insertPos > -1) {
this.dataStore.splice(insertPos+1, 0, element)
++this.listSize
return true
}
return false
}
// clear
// 清除元素 并将列表长度和当前位置设为0
function clear () {
delete this.dataStore
this.dataStore = []
this.listSize = this.pos = 0
}
// contains
// 如果列表中包含该元素则返回true 否则返回false
function contains (element) {
for (var i=0; i<this.dataStore.length; ++i) {
if (this.dataStore[i] == element) {
return true
}
}
return false
}
// 遍历列表 控制位置的一些函数
function front () {
this.pos = 0
}
function end () {
this.pos = this.listSize-1
}
function prev () {
if (this.pos > 0) {
--this.pos
}
}
function next () {
if (this.pos < this.listSize-1) {
++this.pos
}
}
function currPos () {
return this.pos
}
function moveTo (position) {
this.pos = position
}
function getElement () {
return this.dataStore[this.pos]
}
// 测试代码二
var names2 = new List()
names2.append('xx4')
names2.append('xx5')
names2.append('xx6')
names2.append('xx7')
names2.front()
console.log('front', names2.getElement()) // xx4
names2.next()
console.log('next', names2.getElement()) // xx5
names2.next()
names2.next()
names2.prev()
console.log('prev',names2.getElement()) // xx6
// 使用迭代器遍历列表(从前向后)
for(names2.front(); names2.currPos() < names2.length; names2.next()) {
console.log('for1', names2.getElement())
}
// 使用迭代器遍历列表(从后向前)
for(names2.end(); names2.currPos() >= 0; names2.prev()) {
console.log('for2', names2.getElement())
}
// 读取文件
function createArr(file) {
// 以换行符分隔为数组
var arr = read(file).split('\n')
for(var i=0; i<arr.length; ++i){
// 数组的每一项去空格
arr[i] = arr[i].trim()
}
return arr
}
// 实例:使用列表管理影碟租赁
// 将数组movies保存到movieList数组中
var movieList = new List()
for(var i=0; i<movies.length; ++i){
movieList.append(movies[i])
}
// 显示列表(原生数据类型)
function displayList(list) {
for(list.front(); list.currPos() < list.length; list.next()) {
console.log(list.getElement())
}
}
// 显示列表(自定义类型)
function displayList(list) {
for(list.front(); list.currPos() < list.length(); list.next()){
if (list.getElement() instanceof Customer) {
console.log(list.getElement()['name'] + ', ' + list.getElement()['movie'])
} else {
console.log(list.getElement())
}
}
}
// 创建客户列表
var customers = new List()
// customer对象的构造函数
function Customer(name, movie) {
this.name = name
this.movie = movie
}
// 客户检出电影的函数
function checkOut(name, movie, filmList, customerList) {
if (movieList.contains(movie)) {
var c = new Customer(name, movie)
customerList.append(c)
filmList.remove(movie)
} else {
console.log(movie + 'is not available.')
}
}
本文介绍了一个用JavaScript实现的列表类,包括列表的创建、元素的添加、查找、删除等操作,以及如何遍历列表和使用迭代器。文章还提供了详细的代码示例,展示了列表类的使用方法。

被折叠的 条评论
为什么被折叠?



