JavaScript DHTML/Data Type/Vector

Материал из Web эксперт
Перейти к: навигация, поиск

To have a dynamic collection instead of using arrays when the total quantity is unknown

   <source lang="html4strict">

<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> <Script language="JavaScript"> ////////////////////////////////////////////////////// // File: vector.js // // Author: Jason Geissler // // Date: Sept 3, 2003 // // Purpose: To have a dynamic collection instead // of using arrays when the total quantity // is unknown ////////////////////////////////////////////////////// // Vector Constructor -- constructs the object function Vector(inc) {

 if (inc == 0) {
   inc = 100;
 }
 
 /* Properties */
 this.data = new Array(inc);
 this.increment = inc;
 this.size = 0;
 
 /* Methods */
 this.getCapacity = getCapacity;
 this.getSize = getSize;
 this.isEmpty = isEmpty;
 this.getLastElement = getLastElement;
 this.getFirstElement = getFirstElement;
 this.getElementAt = getElementAt;
 this.addElement = addElement;
 this.insertElementAt = insertElementAt;
 this.removeElementAt = removeElementAt;
 this.removeAllElements = removeAllElements;
 this.indexOf = indexOf;
 this.contains = contains
 this.resize = resize;
 this.toString = toString;
 this.sort = sort;
 this.trimToSize = trimToSize;
 this.clone = clone;
 this.overwriteElementAt;

} // getCapacity() -- returns the number of elements the vector can hold function getCapacity() {

 return this.data.length;

} // getSize() -- returns the current size of the vector function getSize() {

 return this.size;

} // isEmpty() -- checks to see if the Vector has any elements function isEmpty() {

 return this.getSize() == 0;

} // getLastElement() -- returns the last element function getLastElement() {

 if (this.data[this.getSize() - 1] != null) {
   return this.data[this.getSize() - 1];
 }

} // getFirstElement() -- returns the first element function getFirstElement() {

 if (this.data[0] != null) {
   return this.data[0];
 }

} // getElementAt() -- returns an element at a specified index function getElementAt(i) {

 try {
   return this.data[i];
 } 
 catch (e) {
   return "Exception " + e + " occured when accessing " + i;  
 }  

} // addElement() -- adds a element at the end of the Vector function addElement(obj) {

 if(this.getSize() == this.data.length) {
   this.resize();
 }
 this.data[this.size++] = obj;

} // insertElementAt() -- inserts an element at a given position function insertElementAt(obj, index) {

 try {
   if (this.size == this.capacity) {
     this.resize();
   }
   
   for (var i=this.getSize(); i > index; i--) {
     this.data[i] = this.data[i-1];
   }
   this.data[index] = obj;
   this.size++;
 }
 catch (e) {
   return "Invalid index " + i;
 }

} // removeElementAt() -- removes an element at a specific index function removeElementAt(index) {

 try {
   var element = this.data[index];
   
   for(var i=index; i<(this.getSize()-1); i++) {
     this.data[i] = this.data[i+1];
   }
   
   this.data[getSize()-1] = null;
   this.size--;
   return element;
 }
 catch(e) {
   return "Invalid index " + index;
 }

} // removeAllElements() -- removes all elements in the Vector function removeAllElements() {

 this.size = 0;
 
 for (var i=0; i<this.data.length; i++) {
   this.data[i] = null;
 }

} // indexOf() -- returns the index of a searched element function indexOf(obj) {

 for (var i=0; i<this.getSize(); i++) {
   if (this.data[i] == obj) {
     return i;
   }
 }
 return -1;

} // contains() -- returns true if the element is in the Vector, otherwise false function contains(obj) {

 for (var i=0; i<this.getSize(); i++) {
   if (this.data[i] == obj) {
     return true;
   }
 }
 return false;

} // resize() -- increases the size of the Vector function resize() {

 newData = new Array(this.data.length + this.increment);
 
 for  (var i=0; i< this.data.length; i++) {
   newData[i] = this.data[i];
 }
 
 this.data = newData;

}

// trimToSize() -- trims the vector down to it"s size function trimToSize() {

 var temp = new Array(this.getSize());
 
 for (var i = 0; i < this.getSize(); i++) {
   temp[i] = this.data[i];
 }
 this.size = temp.length - 1;
 this.data = temp;

} // sort() - sorts the collection based on a field name - f function sort(f) {

 var i, j;
 var currentValue;
 var currentObj;
 var compareObj;
 var compareValue;
 
 for(i=1; i<this.getSize();i++) {
   currentObj = this.data[i];
   currentValue = currentObj[f];
   
   j= i-1;
   compareObj = this.data[j];
   compareValue = compareObj[f];
   
   while(j >=0 && compareValue > currentValue) {
     this.data[j+1] = this.data[j];
     j--;
     if (j >=0) {
       compareObj = this.data[j];
       compareValue = compareObj[f];
     }        
   }  
   this.data[j+1] = currentObj;
 }

} // clone() -- copies the contents of a Vector to another Vector returning the new Vector. function clone() {

 var newVector = new Vector(this.size);
 
 for (var i=0; i<this.size; i++) {
   newVector.addElement(this.data[i]);
 }
 
 return newVector;

} // toString() -- returns a string rep. of the Vector function toString() {

 var str = "Vector Object properties:\n" +
           "Increment: " + this.increment + "\n" +
           "Size: " + this.size + "\n" +
           "Elements:\n";
 
 for (var i=0; i<getSize(); i++) {
   for (var prop in this.data[i]) {
     var obj = this.data[i];
     str += "\tObject." + prop + " = " + obj[prop] + "\n";
   }
 }
 return str;  

} // overwriteElementAt() - overwrites the element with an object at the specific index. function overwriteElementAt(obj, index) {

 this.data[index] = obj;

}

////////////////////////////////////////////////////// // File: Matrix.js // // Author: Jason Geissler // // Date: March 9, 2004 // // Purpose: To have a multidimensional dynamic collection instead // of using arrays when the total quantity // is unknown ////////////////////////////////////////////////////// // Matrix() - object constructor function Matrix(h, w) {

 /*Properties */
 this.height = h;
 this.width = w;
 this.rows = new Vector(w);
 
 // set up this.rows. 
 for (var r = 0; r < this.height; r++) {
   var theRow = new Vector(w);
   for (var c = 0; c < this.width; c++) {
     theRow.addElement(null);
   }
   this.rows.addElement(theRow);
 }
 
 /*Methods*/
 this.elementAt = elementAt;
 this.setElementAt = setElementAt;
 this.insertRow = insertRow;
 this.insertColumn = insertColumn;
 this.removeRowAt = removeRowAt;
 this.removeColumnAt = removeColumnAt;
 this.getWidth = getWidth;
 this.getHeight = getHeight;
 this.toString = toString;

} // getElementAt() - returns a value from the given row/column. function elementAt(row, col) {

 try {
   var theRow = this.rows.getElementAt(row);
   return theRow.getElementAt(col);
 }
 catch(e) {
   return "Invalid index";
 }

} // setElementAt() - sets a value at a given row/column function setElementAt(value, row, col) {

 if (row < 0 || row >= this.height || col < 0 || col >= this.width) {
   return "Matrix object out of Bounds";
 }
 var theRow = this.rows.getElementAt(row);
 theRow.insertElementAt(value, col);

} // insertRowAt() - Inserts a blank row at the end. function insertRow() {

 try {
   this.height++;
   var theRow = new Vector(this.width);
   for (var r = 0; r < this.width; r++) {
     theRow.addElement(null);
   }
   this.rows.insertElementAt(theRow, this.height-1);
 }
 catch (e) {
   return "Excecption occured " + e;
 }

} // insertColumnAt() -- Inserts a column at the end. function insertColumn() {

 try {
   this.width++;
   
   for (var c=0; c < this.height; c++) {
     this.rows.getElementAt(c).insertElementAt(null, this.width-1);
   }    
 }
 catch (e) {
   return "Invalid column number";
 }

} // removeRowAt() - removes a row at a given index. function removeRowAt(row) {

 try {
   var result = this.rows.getElementAt(row);
   this.height--;
   
   for (var r=row + 1; r <= this.height; r++) {
     var theRow = this.rows.getElementAt(r);
     this.rows.insertElementAt(theRow, r-1);
     this.rows.removeElementAt(r);
   }
   return result;
 }
 catch (e) {
   return "Invalid row number";
 }

} // removeColumnAt() - removes a given column function removeColumnAt(col) {

 try {
   var result = new Vector(this.height);
   this.width--;
   
   for(var r = 0; r < this.height; r++) {
     var element = this.rows.getElementAt(r).removeElementAt(col);
     result.addElement(element);
   }
     
   return result;
 }
 catch (e) {
   return "Invalid column number";
 }

} // getWidth() - returns the Matrix width function getWidth() {

 return this.width;

} // getHeight() - returns the Matrix height function getHeight() {

 return this.height;

} // toString() - returns String data about the Matrix object function toString() {

 var s = "Height: " + this.height + " Width: " + this.width + " Rows: " + this.rows;
 return s;

}


</Script> <Script language="JavaScript"> /*

 elementAt;
 setElementAt;
 insertRow;
 insertColumn;
 removeRowAt;
 removeColumnAt;
 getWidth;
 getHeight;
 toString;
  • /
 var theMatrix = new Matrix(8,8);
 var counter = 1;
 
 for (var i = 0; i < theMatrix.getHeight(); i++) {
   for (var j = 0; j < theMatrix.getWidth(); j++) {
     
     if (counter % 2 == 0) {
       theMatrix.setElementAt("red", i, j);
     }
     else {
       theMatrix.setElementAt("black", i, j);
     }
     
     counter++;
   }
   counter++;
 }
 
     

</Script> </HEAD> <BODY>

"); for (var y = 0; y < theMatrix.getWidth(); y++) { var color = theMatrix.elementAt(x, y); document.write("
Element At</TD></TR>
 <Script language="JavaScript">
   
   for (var x = 0; x < theMatrix.getHeight(); x++) {
document.write("
   </TD>");
     }
     
     document.write("</TR>");
   }
   
   document.writeln("");
   document.writeln("");
   document.writeln("<B>Width: " + theMatrix.getWidth());
   document.writeln("Height: " + theMatrix.getHeight());
   document.writeln("ToString: " + theMatrix.toString());
   
 </Script>  
"); for (var y = 0; y < theMatrix.getWidth(); y++) { var color = theMatrix.elementAt(x, y) document.write("
Remove Row At</TD></TR>
 <Script language="JavaScript">
 
   var removedRow = theMatrix.removeRowAt(2);
   
   for (var x = 0; x < theMatrix.getHeight(); x++) {
document.write("
   </TD>");
     }
     
     document.write("</TR>");
   }
   
       
 </Script>  
 </Table>
 </Table>
"); for (var y = 0; y < theMatrix.getWidth(); y++) { var color = theMatrix.elementAt(x, y) document.write("
Remove Column At</TD></TR>
 <Script language="JavaScript">
 
   var removedRow = theMatrix.removeColumnAt(2);
   
   for (var x = 0; x < theMatrix.getHeight(); x++) {
document.write("
   </TD>");
     }
     
     document.write("</TR>");
   }
 </Script>  
 </Table>  

</BODY> </HTML>

      </source>
   
  


Vector based on Array

   <source lang="html4strict">

<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> <SCRIPT language="JavaScript"> // Vector Class // Constructor function Vector(size) {

 if (size == 0) {
   size = 10;
 }
 this.theArray = new Array(size);
 this.index = 0;

} // size() -- returns the size of the vector function size() {

 return this.theArray.length;

} // getElement() -- returns the current element function getElement() {

 if (this.theArray != null) {
   return this.theArray[index];
 }

} // getLastElement() -- returns the last element function getLastElement() {

 if (this.theArray{this.theArray.length - 1] != null) {
   return this.theArray[this.theArray.length - 1];
 }

} // getFirstElement() -- returns the first element function getFirstElement() {

 if (this.theArray[0] != null) {
   return this.theArray[0];
 }

} // addElement() -- adds a element at the end of the Vector function addElement(vObject) {

 if(this.theArray.length == this.index) {
   resize(10);
 }
 
 this.theArray[index] = vObject;

} // addElementAt -- adds a element at a certain index of the Vector function addElementAt(vObject, i) {

 while (this.theArray.length <= i) {
   resize(10);
 }
 
 this.theArray[i] = vObject;

} // removeElementAt() -- removes and returns the element at a certain index function removeElementAt() {

} // removeAllElements() -- removes all elements in the Vector function removeAllElements() {

 delete this.theArray

} // resize() -- increases the size of the Vector function resize() { } // toString() -- returns a string rep. of the Vector function toString() { } </SCRIPT> </HEAD>

      </source>