Is string one places edit away

by Alex Myronov

Babel + JSX

const isOneChartInserted = (str1, str2) => {
	let index1 = 0
	let index2 = 0

  for (let i = 0; i < str1.length; i++) {
  	if (str1[index1] === str2[index2]) {
    	index1++
      index2++
    } else {
    	if (index1 === index2) {
      	index2++
      } else {
	      return false
      }    
    }
  }
  return true
}

const isSingleReplacement = (str1, str2) => {
	let oneZeroReplacement

  for (let i = 0; i < str1.length; i++) {
    if (str1[i] !== str2[i]) {
    	if (oneZeroReplacement) {
      	return false
      }
      oneZeroReplacement = true
    }
  }
  return oneZeroReplacement || true
}

const oneEditAway = (str1, str2) => {
	if (str1.length === str2.length) {
  	return isSingleReplacement(str1, str2)
  } else if (str1.length - 1 === str2.length) {
  	return isOneChartInserted(str2, str1)
  } else if (str2.length - 1 === str1.length) {
  	return isOneChartInserted(str1, str2)
  }
  return false
}

console.log("pale, ple", oneEditAway('pale', 'ple'))
console.log("pales, pale", oneEditAway('pales', 'pale'))
console.log("pale, bale", oneEditAway('pale', 'bale'))
console.log("pale, bae", oneEditAway('pale', 'bae'))