1. 概念
列表是一组有序数据的集合,其中的每项数据被称为 元素
。在 js 中,列表中的元素可以是任意数据类型。列表中可以保存任意多个元素(在实际使用时会受到程序内存的限制)。
2. 属性和方法
列表中有一些常见的属性和方法,下面一一列举:
- listSize(属性):列表的元素个数
- position(属性):列表当前的位置
- clear(方法):清空列表中的所有元素
- getElement(方法):获取当前位置上的元素
- find(方法):在列表中查找一个元素
- insert(方法):在现有元素后插入新元素
- append(方法):在列表末尾插入新元素
- remove(方法):从列表删除元素
- front(方法):将列表的当前位置移动到第一个元素
- end(方法):将列表的当前位置移动到最后一个元素
- prev(方法):将当前位置向前移动一位
- next(方法):将当前位置向后移动一位
- moveTo(方法):将当前位置移动到指定位置
3.JS 代码实现一个列表类
我们先定义一个列表类,将列表的属性和方法包装在类里
function List(){this.dataSet = []// 初始化一个空数组来保存列表元素
this.pos = 0// 初始化一个属性表示列表当前的位置
this.listSize = 0 // 初始化一个属性表示列表元素个数
this.clear = clear;// 清空列表里的元素
this.find = find;// 在列表上查找一个元素
this.getElement = getElement;// 返回当前位置的元素
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.currPos = currPos;
this.moveTo = moveTo;
this.contains = contains;}
有了这个类,我们就可以执果索因,一步步将完整的构造函数写出来
3.1 实现 clear 方法
function clear(){
delete this.dataSet;// 删除原来的 dataSet
this.dataSet = [];// 将新数组赋给 dataSet
this.pos = this.listSize = 0;// 将数组当前位置和数组长度初始化为 0
}
3.2 实现 find 方法
function find(element){for(var i=0;i<this.dataSet.length;i++){if(this.dataSet[i]===element){return i // 若找到了 element,则返回该元素的位置}
}
return -1 // 若没有在 dataSet 中找到 element,则返回 -1
}
3.3 实现 getElement 方法
function getElement(pos){return this.dataSet[this.pos]
}
3.4 实现 toString 方法
function toString(){return this.dataSet}
3.5 实现 insert 方法
function insert(element){this.dataSet.splice(this.pos,0,element);
}
3.6 实现 append 方法
function append(element){this.dataSet[this.listSize++]=element;
}
3.7 实现 remove 方法
function remove(element){var nowPos = this.find(element);
if(nowPos>-1){this.dataSet.splice(nowPos,1)
this.listSize—-; // 删除元素后要把 listSize 也减一
return true // 删除成功,则返回 true
}
return false // 若删除不成功,则返回 false
}
3.8 实现六个操作 position 的方法
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(newPos){if(newPos>=0&&newPos<=this.listSize-1){this.pos = newPos}
}
3.9 实现 contains 方法
function contains(element){var res = this.find(element);
if(res>-1){return true}else{return false}
}