编辑代码

/**
 * 列表:列表是一组有序的数据
 * 没个列表中的数据称为元素。在js中,列表中的元素可以是任意数据类型
 * 列表中可以保存多少元素并没有事先限定,实际使用时元素的数量收到程序内存的限制
 */
class List {
    constructor() {
        this.listSize = 0;
        this.pos = 0;
        this.dataStore = []; // 初始化一个空数组用于保存列表元素
    }
    findIndex(element) {
        return this.dataStore.findIndex(ele => ele === element);
    }
    // 清空列表
    clear() {
        delete this.dataStore;
        this.dataStore = [];
        this.listSize = this.pos = 0;
    }
    // 返回列表的字符串形式
    toString() {
        return this.dataStore;
    }
    length() {
        return this.listSize;
    }
    // 返回当前位置的元素
    getElement() {
        return this.dataStore[this.pos];
    }
    // 在现有元素后插入新元素
    insert(element, after) {
        const index = this.findIndex(after);
        if (index > -1) {
            this.dataStore.splice(index + 1, 0, element);
            this.listSize++;
            return true;
        }
        return false;
    }
    // 在列表的末尾添加新元素
    append(element) {
        this.dataStore[this.listSize++] = element;
    }
    // 从列表中删除元素
    remove(elememt) {
        const index = this.findIndex(elememt);
        if (index > -1) {
            this.dataStore.splice(index, 1);
            this.listSize--;
            return true;
        }
        return false;
    }
    // 将列表的当前位置移动到第一个元素
    front() {
        this.pos = 0;
    }
    // 将列表的当前位置移动到最后一个元素
    end() {
        this.pos = this.listSize - 1;
    }
    // 将当前位置后移一位
    prev() {
        if (this.pos > 0) {
            this.pos--;
        }
    }
    // 将当前位置前移一位
    next() {
        if (this.pos < this.listSize - 1) {
            this.pos++;
        }
    }
    // 返回列表的当前位置
    currPos() {
        return this.pos;
    }
    // 将当前位置移动到指定位置
    moveTo(position) {
        this.pos = position;
    }
    // 列表是否包含元素
    contains(element){
        return this.dataStore.includes(element);
    }
}

const names = new List();

names.append("Cynthia");
names.append("Raymond");
names.append("Barbara");
// console.log(names.toString());
// // names.remove("Raymond");
// // console.log(names.toString());
// names.front();
// console.log(names.getElement())
// names.next();
// console.log(names.getElement())
// names.next();
// names.next();
// names.prev();
// console.log(names.getElement())
// names.prev();
// console.log(names.getElement())

for (names.front(); names.currPos() < names.length(); names.next()) {
    console.log(names.getElement());
}

console.log(names.contains('Raymond'))