Я недавно закончил буткемп и ищу работу на карантине. Каждый день я стараюсь сделать хотя бы один помодор по программированию, помимо поиска работы, работы над проектами и т. д. Codewars — это самый простой способ для меня не заржаветь и, надеюсь, стать лучше. Когда я застряну, я погуглю название или описание ката, чтобы получить помощь. Обычно я заканчиваю тем, что нахожу чужой repl.it, реконструирую его, а также отправляю моему двоюродному брату-разработчику много сообщений в Facebook за помощью о том, что мне даже нужно гуглить, чтобы понять вещи. Поэтому я подумал: Почему бы не начать писать свои собственные посты о ката, которые я выполняю, и о том, как я это понял? в надежде, что это может помочь другим людям научиться программировать.

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

Описание ката:

Ваша задача — отсортировать заданную строку. Каждое слово в строке будет содержать одно число. Это число и есть позиция, которую должно занимать слово в результате.

Примечание. Цифры могут быть от 1 до 9. Таким образом, первым словом будет 1 (а не 0).

Если входная строка пуста, вернуть пустую строку. Слова во входной строке будут содержать только допустимые последовательные числа.

Я на уровне 6 и решаю это в javascript. Прокрутите вниз для окончательного решения.

Итак, глядя на это, я знаю, что мне нужен массив для работы, чтобы сортировать числа. Я продолжаю и устанавливаю условие для пустой строки. Затем я сохраняю строку «слова» в виде массива в новой переменной, используя метод .split(«»). Затем я перебираю массив простым циклом for.

var arr = words.split(“ “);
for(var i = 0; i < arr.length; i++){
}

Теперь, когда у меня есть массив для работы, мне нужно найти способ отсортировать слова (элементы массива), не отделяя их от чисел. Многие решения, которые я гуглил, на самом деле делали это с использованием регулярных выражений, но я относительно новичок в регулярных выражениях, поэтому я продолжал гуглить. Вот где появляется indexOf(). Я когда-либо использовал indexOf только для поиска определенного элемента или индекса, я никогда раньше не использовал его в условном выражении, подобном этому. Это одна из тех вышеупомянутых ситуаций, когда мне приходилось реконструировать решенную ката, и эта казалась изящным решением.

Если вы, как и я, не привыкли использовать indexOf(), то это может показаться немного сложным.

var result = [];
var j = 1;
if(arr[i].indexOf(j) > -1){
result.push(arr[i])
j++
i=-1;
}

Итак, когда мы перебираем массив, мы берем каждый элемент и спрашиваем: «Вы j?/вы 1?» Первый элемент в массиве «is2» НЕ является j. Обычно индекс для is2 равен 0, но с помощью метода indexOf() мы превращаем индекс is2 в -1, потому что так работает indexOf(). Когда элемент в массиве не удовлетворяет проверке element === target, возвращается значение -1. Итак, наше условное утверждение говорит: «Вы j? Если вы не j, то вы -1", прежде чем он перейдет к вопросу: "Вы больше, чем -1?" в последней части условного предложения. «Is2» не является ни тем, ни другим, поэтому мы переходим ко второму элементу массива, «Thi1s».

«Thi1s» IS j и больше -1. Итак, теперь мы помещаем этот элемент в новый массив. Мы также увеличиваем j до 2 и возвращаем индекс к -1 перед тем, как перейти к следующему элементу массива. Как только вы поймете, что делает indexOf(), все остальное станет совершенно понятным. Проверив 1 с помощью indexOf, мы можем упорядочить все элементы массива в новый массив и просто вернуть новый массив с помощью метода .join(““).

**Как я уже сказал, я новичок в программировании, поэтому, если что-то в этом посте неверно, не стесняйтесь обращаться ко мне и дайте мне знать!!***

Окончательное решение:

var words = “is2 Thi1s T4est 3a”
function order(words){
if( words === “”){
return “”
}
var arr = words.split(“ “)
var result = []
var j = 1;
for(var i = 0; i < arr.length; i++){
if(arr[i].indexOf(j) > -1){
result.push(arr[i])
j++
i=-1;
}
}
return result.join(“ “)
}
order(words)