JavaScript DHTML/Data Type/Vector

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

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

<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>
  <Table align="center">
  <TR><TD align=center colspan=8><B>Element At</TD></TR>    
  <Script language="JavaScript">
    
    for (var x = 0; x < theMatrix.getHeight(); x++) {
      document.write("<TR>");
      
      for (var y = 0; y < theMatrix.getWidth(); y++) {
        var color = theMatrix.elementAt(x, y);
        document.write("<TD bgcolor="" + color + "">&nbsp;&nbsp;&nbsp;</TD>");
      }
      
      document.write("</TR>");
    }
    
    document.writeln("");
    document.writeln("");
    document.writeln("<B>Width: </B>" + theMatrix.getWidth());
    document.writeln("<B>Height: </B>" + theMatrix.getHeight());
    document.writeln("<B>ToString: </B>" + theMatrix.toString());
    
  </Script>  
  </Table>
  <Table align="center">
  <TR><TD align=center colspan=8><B>Remove Row At</TD></TR>    
  <Script language="JavaScript">
  
    var removedRow = theMatrix.removeRowAt(2);
    
    for (var x = 0; x < theMatrix.getHeight(); x++) {
      document.write("<TR>");
      
      for (var y = 0; y < theMatrix.getWidth(); y++) {
        var color = theMatrix.elementAt(x, y)
        document.write("<TD bgcolor="" + color + "">&nbsp;&nbsp;&nbsp;</TD>");
      }
      
      document.write("</TR>");
    }
    
        
  </Script>  
  </Table>
  </Table>
  <Table align="center">
  <TR><TD align=center colspan=8><B>Remove Column At</TD></TR>    
  <Script language="JavaScript">
  
    var removedRow = theMatrix.removeColumnAt(2);
    
    for (var x = 0; x < theMatrix.getHeight(); x++) {
      document.write("<TR>");
      
      for (var y = 0; y < theMatrix.getWidth(); y++) {
        var color = theMatrix.elementAt(x, y)
        document.write("<TD bgcolor="" + color + "">&nbsp;&nbsp;&nbsp;</TD>");
      }
      
      document.write("</TR>");
    }
  </Script>  
  </Table>  
</BODY>
</HTML>



Vector based on Array

<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>