2015-07-13 2 views
0

Будучи новичком, я стремлюсь заострить свои ужасные навыки Javascript. Поэтому я занимаюсь некоторыми проблемами Javascript, которые я нашел в rmion.com. Я застрял на # 4 (Я действительно имею в виду застрял, я сделал все возможное самостоятельно, прежде чем приносить его в stackoverflow).Итерация строки в цикле работает не так, как ожидалось

Инструкция: Напишите функцию translate(), которая переведет текст в "rövarspråket". То есть, удваивайте каждый согласный и помещайте вхождение «o» между ними. Например, перевод («это весело») должен вернуть строку «tothohisos isos fofunon».

Вот что я придумал до сих пор:

var vowel = 'a,e,i,o,u'; 
newString = ''; 
function vowelCheck(character) { 
    for (var i = 0; i < character.length; i++) { 
    if (character !== vowel[i]) { 
     return newString + ((character[i]+character[i])+'o'); 
    } else { 
     return newString + (character[i]+'o'); 
    } 
    } 
} 
vowelCheck('abc'); 

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

a,o,b,b,o,c,o 

Однако, поскольку функции возвращает значение с длиной строки, равной заданному параметру функции . длина прекращает выполнение цикла.

vowelCheck("abc"); 
// returns "aao" 

Можно ли с кодом, которую я написал, чтобы сделать функцию запустить для каждой буквы в vowelCheck («ABC»);?

Я не рассматривал решение rmion, потому что я пытаюсь понять, в чем я ошибаюсь. Если это не возможно, с тем, что я написал, какие-то намеки было бы здорово ^^ (я не ищу халявы)

+2

Почему ожидается возврат 'a, o, b, b, o, c, o' для входного слова' abc'? Можете ли вы объяснить свою идею? –

+2

Ваш ожидаемый результат не соответствует инструкции; это проблема? – Mathletics

ответ

1

Основной проблемой является эта строка:

if (character !== vowel[i]) 

Это на самом деле не делает что-нибудь.

Что вы можете сделать, это использовать массив для хранения гласные:

var vowels = ['a', 'e', 'i', 'o', 'u']; 

, а затем проверить, если персонаж находится в этом массиве:

// if vowels does NOT contain the character... 
if (vowels.indexOf(character[i]) === -1) 

Наконец:

return newString + ((character[i]+character[i])+'o'); 

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

newString += ((character[i] + 'o' + character[i])); 

будет продолжать добавлять подстроки в выходную строку, которую вы можете затем вернуть в конце функции.

Here's a working example you can reference если вы хотите.

+2

Это то, что я собирался предложить, хотя массив не является строго необходимым. 'indexOf' также будет работать и с строкой, но строка должна быть просто' 'aeiou'' без запятых, чтобы предотвратить ложные срабатывания. – shshaw

+0

Это справедливая точка.Я просто предпочитаю массивы :) – Andy

+0

@ Энди очень обязан! Наверное, у меня много учиться делать ^^> –

Смежные вопросы