列表是一种常见的数据结构,通常列表是一族有徐的数据,列表中的数据项称为元素。在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. 为网站添加ico图标

    1.将目标图片装换为.ico格式 在线转换工具:http://www.bitbug.net/ 2.将装换后的图标放入项目文件中,一般命名为favicon 3.在项目文件的index页面中引入 < ...

  2. Q:关于Outlook for CRM 中预览记录窗体的设置

    问题: 如何在Outlook for CRM中,将实体记录的预览窗口的信息做调整? 解决方案: 在Outlook里,在打开实体后选择View=>Customize Reading Pane,这里 ...

  3. Xcode证书路径和缓存清理路径

    1.Xcode证书路径: ~/Library/MobileDevice/Provisioning Profiles 2.Jenkines共享证书路径: /用户/共享/Jenkins/Library/M ...

  4. 实战1--应用EL表达式访问JavaBean的属性

    (1)编写index.jsp页面,用来收集用户的注册信息 <%@ page language="java" pageEncoding="GBK"%> ...

  5. 【转】IOS开发中图片资源使用png还是jpg格式

    对于iOS本地应用程序来说最简单的答案就是始终使用PNG,除非你有非常非常好的理由不用它. 当iOS应用构建的时候,Xcode会通过一种方式优化.png文件而不会优化其它文件格式.它优化得相当的好 他 ...

  6. iOSQuartz2D-03-定制个性头像

    效果图 将一张图片剪切成圆形 在图片周围显示指定宽度和颜色的边框 实现思路 效果图中主要由不同尺寸的两大部分组成 蓝色的背景区域,尺寸等于图片的尺寸加上边框的尺寸 图片区域,尺寸等于图片的尺寸 绘制一 ...

  7. .net WEB程序访问locahost和IP使用

    1.服务都在本机调用用 localost 2.部署站点访问时用ip

  8. 【故障处理】CRS-1153错误处理

    [故障处理]CRS-1153错误处理 1  CRS-1153: There was an error setting Oracle Clusterware to rolling patch mode. ...

  9. Sql Server 高频,高并发访问中的键查找死锁解析

    死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库 ...

  10. 基于python的flask的应用实例注意事项

    1.所有的html文件均保存在templates文件夹中 2.运行网页时python manage.py runserver