function SparseReverse(array, len) {
  var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, len));
  var high_counter = keys.length - 1;
  var low_counter = 0;
  while (low_counter <= high_counter) {
    var i = keys[low_counter];
    var j = keys[high_counter];

    var j_complement = len - j - 1;
    var low, high;

    if (j_complement <= i) {
      high = j;
      while (keys[--high_counter] == j) { }
      low = j_complement;
    }
    if (j_complement >= i) {
      low = i;
      while (keys[++low_counter] == i) { }
      high = len - i - 1;
    }

    var current_i = array[low];
    if (!IS_UNDEFINED(current_i) || low in array) {
      var current_j = array[high];
      if (!IS_UNDEFINED(current_j) || high in array) {
        array[low] = current_j;
        array[high] = current_i;
      } else {
        array[high] = current_i;
        delete array[low];
      }
    } else {
      var current_j = array[high];
      if (!IS_UNDEFINED(current_j) || high in array) {
        array[low] = current_j;
        delete array[high];
      }
    }
  }
}
function SparseReverse(array, len) {
  var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, len));
  var high_counter = keys.length - 1;
  var low_counter = 0;
  while (low_counter <= high_counter) {
    var i = keys[low_counter];
    var j = keys[high_counter];

    var j_complement = len - j - 1;
    var low, high;

    if (j_complement <= i) {
      high = j;
      while (keys[--high_counter] == j) { }
      low = j_complement;
    }
    if (j_complement >= i) {
      low = i;
      while (keys[++low_counter] == i) { }
      high = len - i - 1;
    }

    var current_i = array[low];
    if (!IS_UNDEFINED(current_i) || low in array) {
      var current_j = array[high];
      if (!IS_UNDEFINED(current_j) || high in array) {
        array[low] = current_j;
        array[high] = current_i;
      } else {
        array[high] = current_i;
        delete array[low];
      }
    } else {
      var current_j = array[high];
      if (!IS_UNDEFINED(current_j) || high in array) {
        array[low] = current_j;
        delete array[high];
      }
    }
  }
}
function SparseReverse ( array , len ) { var keys = GetSortedArrayKeys ( array , % GetArrayKeys ( array , len ) ) ; var high_counter = keys . length - 1 ; var low_counter = 0 ; while ( low_counter <= high_counter ) { var i = keys [ low_counter ] ; var j = keys [ high_counter ] ; var j_complement = len - j - 1 ; var low , high ; if ( j_complement <= i ) { high = j ; while ( keys [ -- high_counter ] == j ) { } low = j_complement ; } if ( j_complement >= i ) { low = i ; while ( keys [ ++ low_counter ] == i ) { } high = len - i - 1 ; } var current_i = array [ low ] ; if ( ! IS_UNDEFINED ( current_i ) || low in array ) { var current_j = array [ high ] ; if ( ! IS_UNDEFINED ( current_j ) || high in array ) { array [ low ] = current_j ; array [ high ] = current_i ; } else { array [ high ] = current_i ; delete array [ low ] ; } } else { var current_j = array [ high ] ; if ( ! IS_UNDEFINED ( current_j ) || high in array ) { array [ low ] = current_j ; delete array [ high ] ; } } } }
For implementing reverse() on large, sparse arrays.
For implementing reverse () on large sparse arrays .