javascript ArrayList 구현

2016. 1. 5. 11:32language/javascript


javascript에서 사용 가능한 ArrayList 예제이다.

 

 

 

javascript에서 java의 collection을 사용고 싶을 때가 많다.

 

배열들 또는 클래스, 함수, Object, Map 등을 담고 사용해야 할 경우가 생긴다.

 

 



 

다음 소스를 js파일로 만들고 해당 파일을 빌드하고

 

java의 ArrayList처럼 사용하면 된다.

 

기본적인 함수 구현

 

ArrayList=function(/* array? */arr){
 // summary
 // Returns a new object of type dojox.collections.ArrayList
 var items=[];
 if(arr) items=items.concat(arr);
 this.count=items.length;
 this.add=function(/* object */obj){
  // summary
  // Add an element to the collection.
  items.push(obj);
  this.count=items.length;
 };
 this.addRange=function(/* array */a){
  // summary
  // Add a range of objects to the ArrayList
  if(a.getIterator){
   var e=a.getIterator();
   while(!e.atEnd()){
    this.add(e.get());
   }
   this.count=items.length;
  }else{
   for(var i=0; i<a.length; i++){
    items.push(a[i]);
   }
   this.count=items.length;
  }
 };
 this.clear=function(){
  // summary
  // Clear all elements out of the collection, and reset the count.
  items.splice(0, items.length);
  this.count=0;
 };
 this.clone=function(){
  // summary
  // Clone the array list
  return new dojox.collections.ArrayList(items); // dojox.collections.ArrayList
 };
 this.contains=function(/* object */obj){
  // summary
  // Check to see if the passed object is a member in the ArrayList
  for(var i=0; i < items.length; i++){
   if(items[i] == obj) {
    return true// bool
   }
  }
  return false// bool
 };
 this.forEach=function(/* function */ fn, /* object? */ scope){
  // summary
  // functional iterator, following the mozilla spec.
  dojo.forEach(items, fn, scope);
 };
 this.get = function(index) {
  return items[index];
 };
 this.size = function() {
  return items.length;
 };
 this.getIterator=function(){
  // summary
  // Get an Iterator for this object
  return new dojox.collections.Iterator(items); // dojox.collections.Iterator
 };
 this.indexOf=function(/* object */obj){
  // summary
  // Return the numeric index of the passed object; will return -1 if not found.
  for(var i=0; i < items.length; i++){
   if(items[i] == obj) {
    return i; // int
   }
  }
  return -1// int
 };
 this.insert=function(/* int */ i, /* object */ obj){
  // summary
  // Insert the passed object at index i
  items.splice(i,0,obj);
  this.count=items.length;
 };
 this.item=function(/* int */ i){
  // summary
  // return the element at index i
  return items[i]; // object
 };
 this.remove=function(/* object */obj){
  // summary
  // Look for the passed object, and if found, remove it from the internal array.
  var i=this.indexOf(obj);
  if(i >=0) {
   items.splice(i,1);
  }
  this.count=items.length;
 };
 this.removeAt=function(/* int */ i){
  // summary
  // return an array with function applied to all elements
  items.splice(i,1);
  this.count=items.length;
 };
 this.reverse=function(){
  // summary
  // Reverse the internal array
  items.reverse();
 };
 this.sort=function(/* function? */ fn){
  // summary
  // sort the internal array
  if(fn){
   items.sort(fn);
  }else{
   items.sort();
  }
 };
 this.setByIndex=function(/* int */ i, /* object */ obj){
  // summary
  // Set an element in the array by the passed index.
  items[i]=obj;
  this.count=items.length;
 };
 this.toArray=function(){
  // summary
  // Return a new array with all of the items of the internal array concatenated.
  return [].concat(items);
 }
 this.toString=function(/* string */ delim){
  // summary
  // implementation of toString, follows [].toString();
  return items.join((delim||","));
 };
};
cs