自己封装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]
----------------------
posted @ 2012-07-17 20:34  水之原  阅读(8058)  评论(5编辑  收藏  举报