列表是一种常见的数据结构,通常列表是一族有徐的数据,列表中的数据项称为元素。在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(方法) 将当前位置移动到指定位置

下面我们看看代码实现

  1. function List() {
  2. this.listSize = 0;
  3. this.pos = 0;
  4. this.dataStore = []; //初始化一个空数组来保存列表元素
  5. this.clear = clear;
  6. this.find = find;
  7. this.toString = toString;
  8. this.insert = insert;
  9. this.append = append;
  10. this.remove = remove;
  11. this.front = front;
  12. this.end = end;
  13. this.prev = prev;
  14. this.next = next;
  15. this.length = length;
  16. this.currPos = currPos;
  17. this.moveTo = moveTo;
  18. this.getElement = getElement;
  19. this.contains = contains;
  20.  
  21. //给列表添加元素,给列表的下一个位置增加一个新的元素,这个位置刚好等于listSize的值
  22. function append(element) {
  23. this.dataStore[this.listSize++] = element;
  24. }
  25.  
  26. //在列表中查找一个元素,对数组对象dataStore迭代,查找给定的元素,如果找到就返回钙元素在列表中的位置
  27. function find(element) {
  28. for(var i = 0; i < this.dataSource.length; ++i) {
  29. if(this.dataSource[i] == element) {
  30. return i;
  31. }
  32. return -1;
  33. }
  34. }
  35.  
  36. //从列表中删除元素,先在列表中找到该元素,然后删除它,并且调整底层的数据对象以填补钙元素留下的空白,slice()方法简化这个过程
  37. function remove(elemment) {
  38. var foundAt = this.find(elemment);
  39. if(foundAt > -1) {
  40. this.dataSource.splice(foundAt, 1);
  41. --this.listSize;
  42. return true;
  43. }
  44. return false;
  45. }
  46.  
  47. //返回列表中的元素个数
  48. function length(){
  49. return this.listSize;
  50. }
  51.  
  52. function toString(){
  53. return this.dataStore;
  54. }
  55.  
  56. //插入元素,先找到要插入的位置,然后插入一个元素listSize自增
  57. function insert(element, after){
  58. var insertPos = this.find(after);
  59. if(insertPos > -1){
  60. this.dataStore.splice(insertPos + 1, 0, element);
  61. ++this.listSize;
  62. return true;
  63. }
  64. return false;
  65. }
  66.  
  67. //清空列表中所有元素,指针指向第一个
  68. function clear(){
  69. delete this.dataStore;
  70. this.dataStore = [];
  71. this.listSize = this.pos = 0;
  72. }
  73.  
  74. //判断给定值是否在列表中
  75. function contains(element){
  76. for (var i=0; i<this.dataStore.length; ++i) {
  77. if(this.dataStore[i] == element){
  78. return true;
  79. }
  80. }
  81. return false;
  82. }
  83.  
  84. //回到第0个
  85. function front(){
  86. this.pos = 0;
  87. }
  88.  
  89. //到最后一个
  90. function end(){
  91. this.pos = this.listSize - 1;
  92. }
  93.  
  94. //上一个,注意这里不判断边界
  95. function prev(){
  96. --this.pos;
  97. }
  98.  
  99. //下一个,注意这里不判断边界
  100. function next(){
  101. ++this.pos;
  102. }
  103.  
  104. //当前指针
  105. function currPos(){
  106. return this.pos;
  107. }
  108.  
  109. //定位到位置
  110. function moveTo(position){
  111. // if( position>-1 && position<this.listSize ){
  112. this.pos = position;
  113. // }
  114. }
  115.  
  116. //返回当前元素
  117. function getElement(){
  118. return this.dataStore[this.pos];
  119. }
  120. }
  121.  
  122. var names = new List();
  123. names.append('Clayton');
  124. names.append('Raymond');
  125. names.append('Cynthia');
  126. names.append('Jennifer');
  127. names.append('Bryan');
  128. names.append('Danny');
  129.  
  130. for(names.front(); names.currPos() < names.length(); names.next()) {
  131. document.writeln(names.getElement());
  132. }
  133.  
  134. for(names.end(); names.currPos() >= 0; names.prev()) {
  135. document.writeln(names.getElement());
  136. }

最后的输出结果如下:

注意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. RHEL7用户管理

    本文介绍Linux的用户管理 用户管理 Linux 是一个可以实现多用户登陆的操作系统,不同用户可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件. 但实 ...

  2. ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段

    Loop at screen会loop处理屏幕上的每一个组件,并对其做相应的处理. SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.PARAMETERS  ...

  3. ABAP中Conversion Routine示例

          在SAP的Domain定义中,Output Length下面有个Convers. routine的标识,这是SAP用来进行输入输出转换的.我们知道,屏幕上的I/O字段都是字符串形式的,而数 ...

  4. MS10-046漏洞测试

    这次用到MS10-046这个远程执行漏洞(Windows快捷方式LNK文件自动执行代码漏洞攻击) 命令: 1.   msfconsole    //启动MSF Metasploit 2.   sear ...

  5. iOS didReceiveMemoryWarning 的处理

    当iOS触发didReceiveMemoryWarning这个方法的时候,我们一般会做一些手动处理,强制清理掉一些目前不用的数据.但是这个方法并不只是单纯的通知开发者你的内存已经吃紧了,系统通知你的同 ...

  6. iOS设计模式之命令模式

    命令模式 基本理解 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化:对请求队列或记录请求日志,以及支持客可撤离的操作. 苹果的Target-Action ...

  7. Android环境的搭建

    一.Java环境的配置(以JDK1.7为例) 在环境变量下查看,查看是否存在JAVA_HOME,没有的话新建一个 JAVA_HOME:java安装目录下jdk的安装目录 Path:jdk目录下面的bi ...

  8. 【读书笔记】iOS-特性

    一,@符号标志着“你将使用Objective-C的特殊用法”.@property是一种新的编译器功能,表示声明了一个新对象属性. 二,@property预编译指令的作用是自动声明属性的setter和g ...

  9. Unity3D事件函数的执行顺序 - 包含渲染等模块的完整版,中英文对照

    原文地址: http://www.cnblogs.com/ysdyaoguai/p/3746828.html In Unity scripting, there are a number of eve ...

  10. 在iOS 8中使用UIAlertController

    iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸 ...