Сегодня был вызов. Я потратил целый час, пытаясь решить задачу, в которой я должен был найти самое длинное слово в строке и вернуть длину слова в виде числа. А учитывая мои ограниченные познания в JavaScript, это оказалось непростой задачей. Некоторое время я сидел, глядя на пустой экран сценария, и думал, как решить эту проблему. Выяснить, как разделить строку на массив, было достаточно просто, как только я изучил метод .split()
, а затем преобразовать слова в числа также было достаточно просто:
function findLongestWord(str) { let strArray = str.split(' '); let strLengthArr = []; for (i = 0; i < strArr.length; i++) { strLengthArr.push(strArray.length[i]); } }
Итак, сверху вниз:
function findLongestWord(str) {
Это настраивает функцию и готовит меня к тому, чтобы делать кое-что с тем, что я добавляю в качестве str
.
let strArray = str.split(' ');
Эта часть функции берет мое str
, создает массив, а затем разделяет каждую часть на отдельные свойства в массиве в соответствии с тем, что я решил использовать в качестве разделителя, в данном случае это пробел ‘ ‘
. Теперь я создаю пустой массив, в котором слова преобразуются в числа, представляющие количество символов каждого из них:
let strLengthArr = [];
Отсюда я добавляю код для фактического преобразования, а затем помещаю результат в пустой массив:
for (i = 0; i < strArr.length; i++) { strLengthArr.push(strArray.length[i]); }
Это цикл for
, который завершается, когда последнее слово в strArr
преобразуется и помещается в strLengthArr
. Как только у меня появилась идея о том, как создать эту систему, мне нужно было написать ее так, чтобы она имела для меня смысл и выполнялась должным образом. После написания этого кода я использовал console.log
, чтобы проверить свою работу и увидеть фактический массив, хранящийся в strLengthArr
. Проблема сводилась к тому, чтобы сравнить каждое свойство в массиве и выяснить, как вернуть наибольшее из них. Именно в это время я услышал в своей голове громкий и отчетливый голос профессора физики: «НАРИСЬ КАРТИНУ!»
Что я сделал, так это написал, чего я хотел достичь, а затем попытался перевести это в код так хорошо, как только мог. Итак, не столько картинка, сколько заметки, чтобы показать, что я хотел сделать:
Поразмыслив, я думаю, что если бы я нарисовал реальную картину, я бы лучше понял, что я делаю. Этот код не работал. Есть две вещи, которые я рассматриваю: либо я плохо понимаю, как применить рекурсию в этом случае (что является наиболее вероятной проблемой), либо я неправильно вызывал результат на консоль (что является наиболее маловероятной проблемой). ). Возможно, я неправильно использую switch
? Я честно не знаю. Что я точно знаю, так это то, что завтра я потрачусь на устранение неполадок и, возможно, перепишу все это целиком.
Я думал, что на что-то наткнулся. И, может быть, я. Может быть, я все преувеличиваю. Может быть, я использую молоток вместо гаечного ключа. Может быть, я недостаточно сильно размахиваю молотком. Хорошо, что меня не заставляют сразу вырубать это. Я могу не торопиться, прорабатывая различные попытки решения и углубляясь в концепции, с которыми работаю, чтобы понять инструменты, которые я пытаюсь использовать.
И я полон решимости не позволить рекурсии победить. Так что, если ответом здесь является рекурсия, я собираюсь выяснить, как исправить этот код, чтобы он работал. Если рекурсия не является ответом, я, по крайней мере, лучше разберусь с рекурсией и узнаю, почему это не тот инструмент, который можно использовать здесь.
Если вы читаете это, дошли до этого места и у вас есть предложения, я внимательно слушаю. Подсказки, мысли и идеи приветствуются, но, пожалуйста, никаких прямых решений. Я хочу играть и делать ошибки и учиться учиться учиться.
12/100