Всем привет.

Я хотел бы разобрать 9-й вызов алгоритма на freeCodeCamp. На этот раз мы должны найти и вернуть недостающую букву в предоставленной строке. Для решения задачи буду использовать следующие методы:

  • "расколоть()"
  • "кусочек()"
  • "индекс чего-либо()"

План состоит в том, чтобы создать два массива и найти разницу между ними. Первый массив, который мы собираемся создать с помощью метода split() для предоставленной строки (в данном случае 'stvwx'):

let testArr = str.split(‘’);
console.log(testArr); //[ 's', 't', 'v', 'w', 'x' ]

Второй массив мы получим из строки алфавита, используя тот же метод split().

let a=’abcdefghijklmnopqrstuvwxyz’;
let arr = a.split(‘’);
console.log(arr); //[ 'a','b','c'...'x','y','z' ]

Но наш второй массив еще не готов. Чтобы упростить поиск пропущенной буквы, давайте извлечем диапазон букв, который будет начинаться и заканчиваться теми же буквами, что и заданная строка («stvwx»). Для этой цели мы будем использовать метод slice, и для этого метода мы должны знать, где начинать (arrStart) и заканчивать (arrEnd) нарезка массива.

let newArr = arr.slice(arrStart, arrEnd);

Прежде всего, давайте создадим переменные, которые будут содержать первую и последнюю буквы данных в строке задачи («stvwx»).

let firstLetter = str[0]
console.log(firstLetter) //s
let lastLetter = str[str.length-1];
console.log(lastLetter) //x

Следующий шаг — найти, где эти буквы расположены в массиве, содержащем афабет. Для этого мы пройдемся по нашему второму массиву arr:

//initialising variables:
let arrStart; 
let arrEnd;
//iterating through array to find indexes where we will start and end our new array
for (let i=0; i<arr.length; i++) {
  if (arr[i] === firstLetter) {
    arrStart = i;
    console.log(i); //18
    }
else if (arr[i] === lastLetter) {
  arrEnd = i;
  console.log(i); //23
  }
}

Теперь у нас есть два аргумента, которые мы можем использовать для создания нашего нового массива, который мы будем сравнивать с массивом из данной строки:

let newArr = arr.slice(arrStart, arrEnd+1);
console.log(newArr);   //[ 's', 't', 'u', 'v', 'w', 'x' ]
console.log(testArr); //[ 's', 't', 'v', 'w', 'x' ]

Последний шаг — сравнить наши массивы. Мы можем сделать это с помощью цикла while:

let i = 0;
while (testArr[i] == newArr[i]) {
  i++;
}

Весь код:

function fearNotLetter(str){
let testArr = str.split(‘’);
let a=’abcdefghijklmnopqrstuvwxyz’;
let arr = a.split(‘’);
let lastLetter = str[str.length-1];
let firstLetter = str[0]
let arrStart;
let arrEnd;
for (let i=0; i<arr.length; i++) {
  if (arr[i] === firstLetter) {
    arrStart = i;
  }
else if (arr[i] === lastLetter) {
  arrEnd = i;
  }
}
let newArr = arr.slice(arrStart, arrEnd+1);
let i=0;
while (testArr[i] == newArr[i]) {
  i++;
  }
return newArr[I];
}
fearNotLetter(“stvwx”);//'u'

Увидимся в следующем испытании!