function arrayEquals(left, right) {
  if (!Array.isArray(left)) {
    return left === right;
  }

  if (!Array.isArray(right)) {
    return false;
  }

  if (left.length !== right.length) {
    return false;
  }

  for (let i = 0; i < left.length; i++) {
    if (!arrayEquals(left[i], right[i])) {
      return false;
    }
  }

  return true;
}
If the value is the noData sentinel, return undefined. Otherwise, return
the value.
@param {*} value The raw value
@returns {*} Either the value or undefined if the value was a no data value.

@private