var GREATER = 1; var LESS = -1; var EQUAL = 0; // arrayIn - array to return columns for // arguments[1 - n] - columns to return function getValues(arrayIn) { args = getValues.arguments; arrayOut = new Array(); for (counter=0; counter < arrayIn.length; counter++) { innerArrayOut = new Array(args.length - 1); for (innerCounter = 1; innerCounter < args.length; innerCounter++) { innerArrayOut[innerCounter - 1] = arrayIn[counter][args[innerCounter]]; } arrayOut[counter] = innerArrayOut; } return arrayOut; } // arrayIn - array to search // indexIn - column to match // valIn - criteria to match function getRows(arrayIn, indexIn, valIn) { arrayOut = new Array(); for (counter=0; counter < arrayIn.length; counter++) { if ((arrayIn[counter][indexIn]) == (valIn)) { arrayOut[arrayOut.length] = arrayIn[counter]; } } return arrayOut; } // arguments[0] = arrayIn // arguments[1 + n] - column // arguments[2 + n] - criteria // as many column/criteria can be supplied as required function getRowsMatchingCriteria() { args = getRowsMatchingCriteria.arguments; arrayOut = args[0] for (cntr = 0; cntr < (args.length - 2); cntr++) { arrayOut = getRows(arrayOut, args[(2 * cntr) + 1], args[(2 * cntr) + 2]); } return arrayOut; } // Kept for backwards compatibility // Now calls the new Multi Column function function getDistinctValues(arrayIn, column) { var colArray = new Array(1); colArray[0] = column; return getDistinctValuesMC(arrayIn, colArray); } // arrayIn - two dimensional array // columns - array of columns that should be distinct function getDistinctValuesMC(arrayIn, columns) { if (arrayIn.length > 0) { arrayIn = sort2DMC(arrayIn, columns); arrayOut = new Array(); arrayOut[0] = arrayIn[0]; for (counter=1; counter < arrayIn.length; counter++) { if (compareRows(arrayIn[counter], arrayIn[counter - 1], columns) != EQUAL) { arrayOut[arrayOut.length] = arrayIn[counter]; } } } return arrayOut; } // Kept for backwards compatibility // Now calls the new Multi Column function function sort2D(arrayIn, column) { var colArray =new Array(1); colArray[0] - column; return sort2DMC(arrayIn, colArray[0]); } // arrayIn - two dimensional array to sort // Sorts on all columns in the array function sort2DMC(arrayIn, sortCols) { //alert("--> sort2DMC -->"); var start = 0; var rest = arrayIn.length - 1; for (var i = rest - 1; i >= start; i--) { for (var j = start; j <= i; j++) { if (compareRows(arrayIn[j+1],arrayIn[j], sortCols) == LESS) { var tempValue = arrayIn[j]; arrayIn[j] = arrayIn[j+1]; arrayIn[j+1] = tempValue; } } } //alert("<-- sort2DMC <--"); return arrayIn; } // Compares two arrays (or rows) based on the columns // defined in the columns array argument function compareRows(arg1, arg2, columns) { var iResult = 0; // While equal and more items to compare on, continue. for (iColumn = 0; 0 == iResult && iColumn < columns.length; iColumn++) { var iComparisonIndex = columns[iColumn]; // Compare the individual columns. iResult = compare(arg1[iComparisonIndex], arg2[iComparisonIndex] ); } return iResult; } // compares arg1 & arg2 returning less, equal or greater function compare(arg1, arg2) { var iResult; // We assume the objects are of the same type, so // we attempt to find the item. if (null == arg1 || null == arg2) { if (arg1 == arg2) { iResult = EQUAL; } else { iResult = (null == arg1) ? GREATER : LESS ; } } else { if (arg1 > arg2) { iResult = GREATER; } else if (arg1 < arg2) { iResult = LESS; } else { iResult = EQUAL; } } return iResult; }