Всем привет.
Я хотел бы разобрать 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'
Увидимся в следующем испытании!