function checkApproximateVersion(a, b) {
  const lowerBound = b.slice();
  const upperBound = b.slice();

  if (upperBound.length > 1) {
    upperBound.pop();
  }
  const lastIndex = upperBound.length - 1;
  const numeric = parseInt(upperBound[lastIndex], 10);
  if (isNumber(numeric)) {
    upperBound[lastIndex] = numeric + 1 + '';
  }

  return (
    checkGreaterThanOrEqual(a, lowerBound) &&
    checkLessThan(a, upperBound)
  );
}
Checks whether `a` is "reasonably close" to `b` (as described in
https://www.npmjs.org/doc/misc/semver.html). For example, if `b` is "1.3.1"
then "reasonably close" is defined as ">= 1.3.1 and < 1.4".

@param {array<string>} a
@param {array<string>} b
@returns {boolean}