javascript中的表结构
列表是一种常见的数据结构,通常列表是一族有徐的数据,列表中的数据项称为元素。在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中的表结构的更多相关文章
- JavaScript中的分支结构
说到JavaScript中的分支结构,我们就不得不提到流程控制这个词,我们所有的程序都是由数据和算法组成的.程序=数据+算法通常我们所说的算法都可以通过"顺序","分支& ...
- 通过jdbc获取数据库中的表结构
通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.Met ...
- VSTO学习笔记(八)向 Word 2010 中写入表结构
原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...
- Sql中获取表结构(字段名称,类型,长度,说明)
Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...
- 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06| 分类: SQL SERVER|举报|字号 订阅 ( ...
- javascript中的队列结构
1.概念 队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构.队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在 ...
- java中访问mysql数据库中的表结构信息
package cn.hncu.meta; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Re ...
- 如何导出远程oracle数据库中的表结构
从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2 ...
- JavaScript中的表单编程
表单编程 1获取表单相关信息 1.什么是表单元素 1.什么是表单元素 在H TML中表单就是指form标签,它的作用是将用户输入或选择的数据提交给指定的服务器 2.如何获取表单元素 <form ...
随机推荐
- 基本完成了一个SEGY扫描程序
利用Seismic.NET编写了一个SEG-Y文件的扫描程序,可以自动判断道头字中主测线号.横测线号.X坐标和Y坐标的位置,自动快速扫描地震数据体中的拐点坐标.10GB多的数据体几十秒全部扫描完成! ...
- 2014年听写VOA50篇
在沪江英语的VOA听写栏目上听写完成50篇,听写笔记PDF. 103.VOASP.2014奥巴马国情咨文(1-3).mp3 104.VOASP.2014奥巴马国情咨文(2-3).mp3 105.VOA ...
- R语言学习笔记:字符串处理
想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit&q ...
- STL--容器适配器(queue、priority_queue、stack)
适配器(Adaptor)是提供接口映射的模板类.适配器基于其他类来实现新的功能,成员函数可以被添加.隐藏,也可合并以得到新的功能. STL提供了三个容器适配器:queue.priority_queue ...
- 【读书笔记】iOS网络-HTTP-请求内容
一,GET方法. 从服务器获取一段内容,用HTTP术语来说就是实体.GET请求通常不包含请求体,不过也是可以包含的.有些网络缓存设施只会缓存GET响应.GET请求通常不会导致服务器端的数据变化. 二, ...
- Android线程管理(二)——ActivityThread
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- centos创建监控宝采集器及添加插件任务
官方的说明文档很不详细操作也有点小问题,故把操作记录如下. 操作系统环境: centos 5.8 python 2.4.3 创建采集器等操作这里就不说了,见官方文档:http://blog.jiank ...
- Entity Framework做IN查询
开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的 ...
- Java GC 面试问题
转自:http://icyfenix.iteye.com/blog/715301 这个帖子的背景是今晚看到je上这张贴:http://www.iteye.com/topic/715256,心血来潮写下 ...
- PE文件结构部分解析以及输入的定位
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...