zoukankan      html  css  js  c++  java
  • 自己封装js的ArrayList类

    众所周之,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]
    ----------------------
  • 相关阅读:
    3月14日进度博客
    构建之法阅读笔记01
    课堂练习-全国疫情统计3
    课堂练习-全球疫情统计2
    课堂练习-全国疫情统计1
    跟我一起写 Makefile(五)
    跟我一起写 Makefile(四)
    跟我一起写 Makefile(三)
    跟我一起写 Makefile(二)
    跟我一起写 Makefile(一)
  • 原文地址:https://www.cnblogs.com/zfc2201/p/2595814.html
Copyright © 2011-2022 走看看