js 实现List
js 实现List
列表是一组有序的数据。每个列表中的数据项称为元素。在 JavaScript 中,列表中的元素可以是任意数据类型。
我们可以根据数组的特性来实现List。
List 抽象数据类型定义
- listSize(属性) 列表的元素个数
- pos(属性) 列表的当前位置
- length(属性) 返回列表中元素的个数
- clear(方法) 清空列表中的所有元素
- toString(方法) 返回列表的字符串形式
- getElement(方法) 返回当前位置的元素
- insert(方法) 在现有元素后插入新元素
- append(方法) 在列表的末尾添加新元素
- remove(方法) 从列表中删除元素
- front(方法) 将列表的当前位置设移动到第一个元素
- end(方法) 将列表的当前位置移动到最后一个元素
- prev(方法) 将当前位置前移一位
- next(方法) 将当前位置后移一位
- currPos(方法) 返回列表的当前位置
- moveTo(方法) 将当前位置移动到指定位置
实现
class List{
constructor() {
this.dataSouce = [];
this.listSize = 0; // 列表的大小
this.pos = 0; // 列表中当前的位置
}
/**
* 在列表的末尾添加新元素
* @param {*} element 要添加的元素
*/
append(element) {
this.dataSouce[this.listSize++] = element;
}
/**
* 在列表中插入一个元素
* @param {*} element
* @param {*} after
*/
insert(element) {
this.dataSouce.push(element);
this.listSize++;
}
/**
* 在列表中移除一个元素
* @param {*} element 要删除的元素
*/
remove(element) {
// 查找当前元素的索引
const index = this.dataSouce.indexOf(element);
if (index >= 0) {
this.dataSouce.splice(index, 1);
this.listSize--;
return true;
}
return false;
}
/**
* 判断给定的值是否在列表中
*/
contains(element) {
return this.dataSouce.indexOf(element) > -1;
}
/**
* 将列表的当前位置设移动到第一个元素
*/
front() {
this.pos = 0;
}
/**
* 将列表的当前位置移动到最后一个元素
*/
end() {
this.pos = this.listSize - 1;
}
/**
* 将当前位置前移一位
*/
prev() {
if (this.pos > 0) {
--this.pos;
}
}
/**
* 将当前位置向后移一位
*/
next() {
if (this.pos <= (this.listSize - 1)) {
++this.pos;
}
}
/**
* 返回列表的当前位置
*/
currPos() {
return this.pos;
}
/**
* 将当前位置移动到指定位置
* @param {*} position
*/
moveTo(position) {
this.pos = position;
}
/**
* 返回当前位置的元素
*/
getElement() {
return this.dataSouce[this.pos];
}
/**
* 清楚列表中的元素
*/
clear() {
delete this.dataSouce;
this.dataSouce = [];
tihs.listSize = 0;
this.pos = 0;
}
/**
* 列表的长度
*/
length() {
return this.listSize;
}
/**
* 显示当前列表的元素
*/
toString() {
return this.dataSouce;
}
}
export default List;
js 实现List的更多相关文章
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- 利用snowfall.jquery.js实现爱心满屏飞
小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- 干货分享:让你分分钟学会 JS 闭包
闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述 ...
- JS核心系列:理解 new 的运行机制
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...
随机推荐
- 看进程的启动时间长度 + vmstat + jstack 应用
1.显示进程已运行的时间 $ ps -e -o pid,comm,etime 2.dd不断的向磁盘写入数据,所以bo的值会骤然提高,而cpu的wait数值也变高,说明由于大量的IO操作,系统的瓶径出现 ...
- linux安装jdk与配置-centos7版本
1.Linux安裝jdk 1.如果電腦沒有wget命令的,先使用yum安裝wget命令. eg: yum install wget 2.安裝好后就可以直接使用wget命令去下載jdk. 附:打開官網連 ...
- js求数组的最大值--奇技淫巧和笨方法
写这篇文章的原因 我目前做的项目很少用到算法,于是这方面的东西自然就有点儿生疏.最近的一次编码中遇到了从数组中获取最大值的需求,当时我不自觉的想到了js的sort()函数,现在想来真是有些“罪过”,当 ...
- Luogu3232 HNOI2013 游走 高斯消元、期望、贪心
传送门 这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关 首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小. 设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次 ...
- CF418D Big Problems for Organizers 树的直径、ST表
题目传送门:http://codeforces.com/problemset/problem/418/D 大意:给出一棵有$N$个节点的树,所有树边边权为$1$,给出$M$次询问,每个询问给出$x,y ...
- 【SQL】MaxComputer中调试与问题排查技巧小结
1.分段调试 面对长的SQL,出错时一般直接看定位的行号,有时候不出错但是没数据时,应该尝试分段调试,很长的SQL嵌套很多的子查询时,一个一个子查询进行分别调试,看哪一步子查询出了问题,层层推进 2. ...
- koa2入门(3)mongoose 增删改查
项目地址:https://github.com/caochangkui/demo/tree/koa-mongoose 连接数据库 数据库名字为:koa-mongoose const mongoose ...
- Linux常用命令行
实时查看日志runtime.log最后100行 tail -f -n 100 runtime.log
- Python从菜鸟到高手(1):初识Python
1 Python简介 1.1 什么是Python Python是一种面向对象的解释型计算机程序设计语言,由荷兰人吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版 ...
- 【JVM.8】类加载及执行子系统的案例与实战
一. 案例分析 1. Tomcat:正统的类加载器架构 主流的Java Web服务器,如Tomcat.Jetty.WebLogic.WebSphere或其他服务器,都实现了自己定义的类加载器(一般都不 ...