`

自己封装js的ArrayList类

    博客分类:
  • JS
 
阅读更多

众所周之,js是没有ArrayList类的,但是js自带了Array类(虽然在js中已经是动态数组了),不过Array类使用起来还是挺别扭的,尤其是一些方法名称,更是让人摸不着头脑,于是就有了自己封装一个ArrayList类的想法。

 

 

(function(win) {
    var ArrayList = function() {
        this.datas = [];
    };

    var proto = ArrayList.prototype;

    proto.size = function() {
        return this.datas.length;
    };

    proto.isEmpty = function() {
        return this.size() === 0;
    };

    proto.contains = function(value) {
        return this.datas.indexOf(value) !== -1;
    };

    proto.indexOf = function(value) {
        for ( var index in this.datas) {
            if (this.datas[index] === value) {
                return index;
            }
        }

        return -1;
    };

    proto.lastIndexOf = function(value) {
        for ( var index = this.size(); index >= 0; index--) {
            if (this.datas[index] === value) {
                return index;
            }
        }
    };

    proto.toArray = function() {
        return this.datas;
    };

    proto.outOfBound = function(index) {
        return index < 0 || index > (this.size() - 1);
    };

    proto.get = function(index) {
        if (this.outOfBound(index)) {
            return null;
        }

        return this.datas[index];
    };

    proto.set = function(index, value) {
        this.datas[index] = value;
    };

    proto.add = function(value) {
        this.datas.push(value);
    };

    proto.insert = function(index, value) {
        if (this.outOfBound(index)) {
            return;
        }

        this.datas.splice(index, 0, value);
    };

    proto.remove = function(index) {
        if (this.outOfBound(index)) {
            return false;
        }

        this.datas.splice(index, 1);
        return true;
    };

    proto.removeValue = function(value) {
        if (this.contains(value)) {
            this.remove(this.indexOf(value));
            return true;
        }
        return false;
    };

    proto.clear = function() {
        this.datas.splice(0, this.size());
    };

    proto.addAll = function(list) {
        if (!list instanceof ArrayList) {
            return false;
        }

        for ( var index in list.datas) {
            this.add(list.get(index));
        }

        return true;
    };

    proto.insertAll = function(index, list) {
        if (this.outOfBound(index)) {
            return false;
        }

        if (!list instanceof ArrayList) {
            return false;
        }
        
        var pos = index;
        for(var index in list.datas)
        {
            this.insert(pos++, list.get(index));
        }
        return true;
    };
    
    function numberorder(a, b) { 
        return a - b; 
    }
    
    proto.sort = function(isNumber){
        if(isNumber){
            this.datas.sort(numberorder);
            return;
        }
        
        this.datas.sort();
    };
    
    proto.toString = function(){
        return "[" + this.datas.join() + "]";
    };
    
    proto.valueOf = function(){
        return this.toString();
    };

    win.ArrayList = ArrayList;
})(window);





我们写一个页面测试一下。

复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="ArrayList.js"></script>
<script type="text/javascript">
window.print = function(value) {
    document.write(value);
};

window.println = function(value) {
    print(value);
    document.write("<br/>");
};

window.onload = function()
{
    var list = new ArrayList();
    list.add("jack");
    list.add(43);
    list.add(true);
    
    println(list.get(0));
    println(list.get(1));
    println(list.get(2));
    println(list.get(3));
    println("----------------------");
    
    println(list.size());
    
    list.remove(2);
    println(list);
    println("----------------------");
    
    println(list.isEmpty());
    list.clear();
    println(list.isEmpty());
    println("----------------------");
    
    list.add("jack");
    list.add(43);
    list.add(true);
    var list2 = new ArrayList();
    list2.addAll(list);
    println(list2);
    println("----------------------");
    
    list2.insert(1,"male");
    println(list2);
    println("----------------------");
    
    list2.removeValue(true);
    println(list2);
    println("----------------------");
    
    list2.insertAll(2,list);
    println(list2);
    println("----------------------");
    
    println(list2.contains("jack"));
    println("----------------------");
    
    list2.clear();
    list2.add(1111);
    list2.add(222);
    list2.add(33);
    list2.add(4);
    
    list2.sort();//按字母顺序排
    println(list2);
    println("----------------------");
    
    list2.sort(true);//按数字顺序排
    println(list2);
    println("----------------------");
}
</script>
</head>
<body>

</body>
</html>    


输出结果如下:

复制代码
jack
43
true
null
----------------------
3
[jack,43]
----------------------
false
true
----------------------
[jack,43,true]
----------------------
[jack,male,43,true]
----------------------
[jack,male,43]
----------------------
[jack,male,jack,43,true,43]
----------------------
true
----------------------
[1111,222,33,4]
----------------------
[4,33,222,1111]
----------------------
分享到:
评论

相关推荐

    Android 实用的数据json数据解析封装类

    在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据传输。对于Android开发者来说,理解和熟练掌握JSON解析至关重要...

    怎么将利用DWR调用JAVA类方法所返回的ArrayList数组   赋值给   logiciterate 迭代器

    - 方法内部实现查询逻辑,例如从数据库中获取数据,并将结果封装成ArrayList返回。 3. **前端JavaScript调用:** - 在HTML页面中,定义一个JavaScript函数来调用DWR提供的方法,例如`getList()`。 - 该函数首先...

    ArrayList类(增强版)

    然而,这里提到的"ArrayList类(增强版)"并不是标准Java集合库中的ArrayList,而是JavaScript中对ArrayList的一种扩展实现。这个增强版的ArrayList通过添加了一些额外的方法,使其具有更多的功能,比如`each`、`...

    java中数组列表ArrayList的使用.doc

    IsSynchronized 属性指示当前的 ArrayList 实例是否支持线程同步,而 ArrayList.Synchronized 静态方法则会返回一个 ArrayList 的线程同步的封装。 3. Count 属性和 Capacity 属性 Count 属性是目前 ArrayList 包含...

    JSON的List数据封装解析方案.pdf

    - 首先,我们需要创建一个工具类`ListToJSONArray`,该类包含三个静态方法,分别用于将`ArrayList&lt;Resources&gt;`,`ArrayList&lt;Types&gt;`和`ArrayList&lt;Messages&gt;`对象封装为`JSONArray`。 - 每个方法都遵循相似的模式:...

    TreeUtil工具类

    总的来说,TreeUtil工具类是Java开发中处理树形数据结构的强大助手,通过封装常见的树操作,简化了开发流程,提高了代码的可读性和复用性。掌握并合理运用这类工具,对于提升开发效率至关重要。

    json对象封装及解析所需的JAR包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和应用程序之间的数据传输,因为它易于阅读和编写,同时也易于机器解析和生成。在Java中,处理JSON对象通常需要依赖特定的库,本...

    javascript的函数、创建对象、封装、属性和方法、继承

    一,function 从一开始接触到js就感觉好灵活,每个人的写法都不一样,比如一个function就有N种写法 如:function showMsg(){},var showMsg=function(){},showMsg=function(){} 似乎没有什么区别,都是一样的嘛,真...

    Java以及部分js课件

    4. **数组与集合框架**:理解一维和多维数组的概念,以及ArrayList、LinkedList、HashSet、HashMap等集合类的使用,了解它们的特点和适用场景。 5. **IO流**:学习文件操作,包括输入输出流的分类,缓冲流的使用,...

    android选择省市的工具类

    本工具类提供了一种非JavaScript的纯Java实现,适用于Android初学者快速集成到项目中。通过这个工具类,开发者可以轻松地实现省市区三级联动选择功能,提升用户体验。 首先,我们需要创建一个`ProvinceCityPicker`...

    JDBC增删改查.pdf

    - getAll方法:这个方法通过执行SQL查询语句“select * from mind”来获取mind表中的所有数据,并将其封装成ArrayList类型返回。在执行查询之前,它会调用getConnection方法来获取数据库连接,并在查询执行完毕后...

    itwill_java_oracle_javascript-master_java_javascript_

    Java的基础包括类、对象、封装、继承、多态等概念。此外,Java还涉及到异常处理、集合框架(如ArrayList、LinkedList、HashMap等)、IO流、多线程、网络编程以及Swing或JavaFX这样的GUI(图形用户界面)工具包。 ...

    Java-learning-courseware.rar_javascript_learning

    2. **类和对象**:面向对象编程的核心概念,包括类的定义、对象的创建、封装、继承和多态。 3. **集合框架**:List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类的使用。 4. **异常...

    javascript表单验证以及创建集合

    javascript帮助类 可以实现创建ArrayList,HashMap集合 各种表单验证方式都封装在里面咯 包括邮箱,时间,url,double,未定义,function,中文,英文,邮政编码 ,电话,移动电话,zip格式,是否空

    JAVA程序设计考试试卷(附答案)(1).doc

    2. **封装类**:Java中的基本数据类型有对应的封装类,例如`float`对应`java.lang.Float`,`char`对应`java.lang.Character`,`boolean`对应`java.lang.Boolean`。这些封装类使得基本数据类型可以和其他对象一样进行...

    学号+姓名-java.docx

    选择题部分通常用于测试学生对Java基础知识的理解,包括但不限于语法、类和对象、数据类型、运算符、流程控制语句(如if-else、switch-case)、数组、集合框架、面向对象概念(如继承、多态、封装)等。由于题目具体...

    java,struts,js等面试题大全

    1. **基础语法**:类、对象、继承、多态、封装。 2. **集合框架**:ArrayList、LinkedList、HashMap、HashSet等的区别和使用场景。 3. **异常处理**:try-catch-finally语句块,异常的分类与自定义异常。 4. **多...

    Spring MVC不能直接接收list类型参数的问题

    首先定义一个 VO (Value Object) 类,其中包含 `List&lt;String&gt;` 类型的属性。 **VO 定义示例**: ```java public class ParamVo { private List&lt;String&gt; areaList; public List&lt;String&gt; getAreaList() { return ...

    jsp+servlet开发java web图书后台管理系统

    项目描述 ...request是负责页面之间传递参数和数据的类,是java封装好的,你只要把它当成一个工具就可以了,就好比你用遥控器控制电视,你并不需要详细了解遥控器的工作原理。所以不用配置mysql。

    java笔试面试题汇总 基础版 最新 最全

    - **基本数据类型与封装类**:了解Java中的原始数据类型(如`int`、`double`)及其对应的封装类(如`Integer`、`Double`),以及它们之间的区别。 #### 2. 类与对象的理解 - **面试题背景**:考查求职者对类和...

Global site tag (gtag.js) - Google Analytics