linq.js
function sequenceEqual(otherSequence, equalityComparer) {
  equalityComparer = typeof equalityComparer === 'function' ? equalityComparer : util.defaultEqualityComparer;
  let selfIterator = this[Symbol.iterator] ? this[Symbol.iterator]() : undefined;
  let otherIterator = otherSequence[Symbol.iterator] ? otherSequence[Symbol.iterator]() : undefined;

  if (toLinqable([selfIterator, otherIterator]).any(i => i === undefined)) return false;

  let selfItem;
  let otherItem;

  do {
    selfItem = selfIterator.next();
    otherItem = otherIterator.next();

    if (!equalityComparer(selfItem.value, otherItem.value)) return false;
  } while (!selfItem.done);

  return selfItem.done === otherItem.done;
}
function sequenceEqual(otherSequence, equalityComparer) {
  equalityComparer = typeof equalityComparer === 'function' ? equalityComparer : util.defaultEqualityComparer;
  let selfIterator = this[Symbol.iterator] ? this[Symbol.iterator]() : undefined;
  let otherIterator = otherSequence[Symbol.iterator] ? otherSequence[Symbol.iterator]() : undefined;

  if (toLinqable([selfIterator, otherIterator]).any(i => i === undefined)) return false;

  let selfItem;
  let otherItem;

  do {
    selfItem = selfIterator.next();
    otherItem = otherIterator.next();

    if (!equalityComparer(selfItem.value, otherItem.value)) return false;
  } while (!selfItem.done);

  return selfItem.done === otherItem.done;
}
function sequenceEqual ( otherSequence , equalityComparer ) { equalityComparer = typeof equalityComparer === 'function' ? equalityComparer : util . defaultEqualityComparer ; let selfIterator = this [ Symbol . iterator ] ? this [ Symbol . iterator ] ( ) : undefined ; let otherIterator = otherSequence [ Symbol . iterator ] ? otherSequence [ Symbol . iterator ] ( ) : undefined ; if ( toLinqable ( [ selfIterator , otherIterator ] ) . any ( i => i === undefined ) ) return false ; let selfItem ; let otherItem ; do { selfItem = selfIterator . next ( ) ; otherItem = otherIterator . next ( ) ; if ( ! equalityComparer ( selfItem . value , otherItem . value ) ) return false ; } while ( ! selfItem . done ) ; return selfItem . done === otherItem . done ; }
Determines whether two sequences are equal by comparing the elements by using the default equality comparer for their type.

@param otherSequence A sequence to compare to the first sequence.
@return true if the two source sequences are of equal length and their corresponding elements are equal according to the equality comparer for their type; otherwise, false.
Determines whether two sequences are equal by comparing the elements by using the default equality comparer for their type .