列表是一种常见的数据结构,通常列表是一族有徐的数据,列表中的数据项称为元素。在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. 关于sap的字段和对象修改记录的查找

    sap的字段和对象的修改都会保存旧值,数据保存在CDHDR和CDPOS表中,对于提取旧值你可以采用两种方法 1)使用sap的标准函数CHANGEDOCUMENT_READ_HEADERS 和CHANG ...

  2. SharePoint 使用代码为页面添加WebPart

    传统的SharePoint实施中,我们通常会创建SharePoint页面,然后添加webpartzone,而后在上面添加webpart:但是有些情况下,也要求我们使用代码,将webpart添加到相应w ...

  3. Android项目实战(三):实现第一次进入软件的引导页

    最近做的APP接近尾声了,就是些优化工作了, 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图) 自己做了一下,结合之前学过的 慕课网_Vie ...

  4. iOS开发者必备的10款工具

    当前iOS和Android两大移动操作系统“二足鼎立”,几乎覆盖了市面上大部分的智能手机.相比Android,iOS开发适配更简单,且随着各种实用工具和Swift语言的出现,iOS开发门槛地降低,开发 ...

  5. [LoadRunner]性能测试实践_Hessian协议脚本编写

    第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...

  6. 每日Scrum--No.6

    Yesterday:组内各种乱八七糟的问题,还有自己的效率问题 Today:进行小范围的测试实验 Problem:在显示各景点构成的邻接矩阵的时候,第一次编译未出现任何错误的提示,但是在程序运行时,无 ...

  7. 在VS项目中通过GIT生成版本号作为编译版本号

    上一篇博客写了如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号.虽然在公司一直使用 SVN ,但我却对 GIT 情有独钟(可能要归功于那段捣鼓 ROM 的时光),但少有 ...

  8. C++基础——子类转父类转子类 (派生类转基类转派生类)

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  9. Neo4j图数据库管理系统开发笔记之三:构建安全的RMI Service(Server)

    RMI Server(服务端)主要包括以下功能:远程用户权限验证管理.远程服务接口实现类.Neo4j实体映射转换等.项目目录结构如下图所示: 3.2.1 远程用户权限验证管理 3.2.1.1 用户权限 ...

  10. 怎么直接让火狐输入json数据,而不是弹出文件保存对话框?

    一.问题再现: 我需要浏览器输出的是json数据,但是浏览器弹出的是一个文件保存的对话框,这样的体验有点差.所以想怎么让浏览器直接输出到浏览器的页面上面,并且格式的输出,还可以编辑. 测试数据: ht ...