列表是一种常见的数据结构,通常列表是一族有徐的数据,列表中的数据项称为元素。在javascript中列表中的数据可以是任意类型的,列表中可以保存多少元素没有事先限定,实际使用时元素的数量只收到程序内内存的限制。

  不包含任何元素的列表称为空列表,列表中包含元素的个数称为列表的length,在内部实现上,用一个变量listSize保存列表中元素的个数。可以在列表末尾append一个元素,也可以在一个给定元素后面insert一个元素,使用remove方法从列表中删除元素,使用clear方法清空列表中素有的元素。

  列表有前后,分别对应front和end,使用getElement()方法显示当前元素,列表拥有描述元素位置的属性,使用next()方法可以从当前元素移动到下一个元素,使用prev()方法可以移动到当前元素的前一个元素,还可以使用moveTo(n)方法直接移动到指定的位置,这里n标识要移动到第n个位置,currPos属性标识列表中的当前位置。

listSize(属性) 列表的元素个数
pos( 属性) 列表的当前位置
length( 属性) 返回列表中元素的个数
clear( 方法) 清空列表中的所有元素
toString( 方法) 返回列表的字符串形式
getElement( 方法) 返回当前位置的元素
insert( 方法) 在现有元素后插入新元素
append( 方法) 在列表的末尾添加新元素
remove( 方法) 从列表中删除元素
front( 方法) 将列表的当前位置设移动到第一个元素
end( 方法) 将列表的当前位置移动到最后一个元素
prev(方法) 将当前位置后移一位
next( 方法) 将当前位置前移一位
currPos( 方法) 返回列表的当前位置
moveTo(方法) 将当前位置移动到指定位置

下面我们看看代码实现

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.contains = contains; //给列表添加元素,给列表的下一个位置增加一个新的元素,这个位置刚好等于listSize的值
function append(element) {
this.dataStore[this.listSize++] = element;
} //在列表中查找一个元素,对数组对象dataStore迭代,查找给定的元素,如果找到就返回钙元素在列表中的位置
function find(element) {
for(var i = 0; i < this.dataSource.length; ++i) {
if(this.dataSource[i] == element) {
return i;
}
return -1;
}
} //从列表中删除元素,先在列表中找到该元素,然后删除它,并且调整底层的数据对象以填补钙元素留下的空白,slice()方法简化这个过程
function remove(elemment) {
var foundAt = this.find(elemment);
if(foundAt > -1) {
this.dataSource.splice(foundAt, 1);
--this.listSize;
return true;
}
return false;
} //返回列表中的元素个数
function length(){
return this.listSize;
} function toString(){
return this.dataStore;
} //插入元素,先找到要插入的位置,然后插入一个元素listSize自增
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;
} //清空列表中所有元素,指针指向第一个
function clear(){
delete this.dataStore;
this.dataStore = [];
this.listSize = this.pos = 0;
} //判断给定值是否在列表中
function contains(element){
for (var i=0; i<this.dataStore.length; ++i) {
if(this.dataStore[i] == element){
return true;
}
}
return false;
} //回到第0个
function front(){
this.pos = 0;
} //到最后一个
function end(){
this.pos = this.listSize - 1;
} //上一个,注意这里不判断边界
function prev(){
--this.pos;
} //下一个,注意这里不判断边界
function next(){
++this.pos;
} //当前指针
function currPos(){
return this.pos;
} //定位到位置
function moveTo(position){
// if( position>-1 && position<this.listSize ){
this.pos = position;
// }
} //返回当前元素
function getElement(){
return this.dataStore[this.pos];
}
} var names = new List();
names.append('Clayton');
names.append('Raymond');
names.append('Cynthia');
names.append('Jennifer');
names.append('Bryan');
names.append('Danny'); for(names.front(); names.currPos() < names.length(); names.next()) {
document.writeln(names.getElement());
} for(names.end(); names.currPos() >= 0; names.prev()) {
document.writeln(names.getElement());
}

最后的输出结果如下:

注意next()方法和prev()方法不判断边界,只负责移动下标。

javascript中的表结构的更多相关文章

  1. JavaScript中的分支结构

    说到JavaScript中的分支结构,我们就不得不提到流程控制这个词,我们所有的程序都是由数据和算法组成的.程序=数据+算法通常我们所说的算法都可以通过"顺序","分支& ...

  2. 通过jdbc获取数据库中的表结构

    通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类   1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.Met ...

  3. VSTO学习笔记(八)向 Word 2010 中写入表结构

    原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...

  4. Sql中获取表结构(字段名称,类型,长度,说明)

    Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...

  5. 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

    查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅     ( ...

  6. javascript中的队列结构

    1.概念 队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构.队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在 ...

  7. java中访问mysql数据库中的表结构信息

    package cn.hncu.meta; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Re ...

  8. 如何导出远程oracle数据库中的表结构

    从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2 ...

  9. JavaScript中的表单编程

    表单编程 1获取表单相关信息 1.什么是表单元素 1.什么是表单元素 在H TML中表单就是指form标签,它的作用是将用户输入或选择的数据提交给指定的服务器 2.如何获取表单元素 <form ...

随机推荐

  1. SQLSERVER数据库表各种同步技术

    1 --SQLSERVER数据库表各种同步技术 减少SQLServer中每次的同步数据量 2 3 --说到数据库,我就不由地想到同步数据,如何尽可能地减少每次的同步数据量,以此来提高同步效率,降低对网 ...

  2. CRUD Operations in MVC4 Using AngularJS and WCF REST Services

    Now in this article I will show how to do Create, Retrieve, Update and Delete (CRUD) operations in M ...

  3. SharePoint 2013 对象模型操作"网站设置"菜单

    在SharePoint的开发中,经常会有客户提到网站操作上的栏目过多,其实,我们除了可以通过Feature的方式添加,还可以通过服务器端对象模型的方式添加:下面,让我用简单的例子,给大家介绍一下: 1 ...

  4. IOS中(Xcode) DEBUG模式(RELEASE模式)控制NSLog输出,NSLog两种不同情况的输出方式

    [新年新气象,2016/01/04] 俺们在开发IOS程序过程中,经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程 ...

  5. 让 Popwindow 向上弹出

    /** * 获取父控件的位置y-popwindow的高度 = 应该显示的y坐标. x这里设置为center 不刻意指定坐标 注意:控件坐标永远是 左上角坐标! * * @param parent */ ...

  6. C语言常量与指针

    C语言功能强大而丰富,还表现在const与指针的结合使用上,对不同的问题,它提供不同的保护,特别有用的是指向常量的指针 本文地址:http://www.cnblogs.com/archimedes/p ...

  7. oc语言常用的字符串函数

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  8. iOS9 HTTP 不能正常使用的解决办法

    Google后查证,iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (ATS) 新特性要求App内访问的网络必须使用H ...

  9. 很好的UI动效设计参考

    toolBar下拉:

  10. maven问题-"resolution will not be reattempted until the update interval of MyRepo has elapsed"

    最近在家里写maven程序的时候老是出现问题,有些问题到了公司就突然消失了. 在修改pom文件后保存的反应还是比较明显的,家里的网遇到有些依赖根本下载不了..墙. 但是到了公司,不但速度快,几乎啥都能 ...