2017-02-23 158 views
0

У меня есть функция для переводчика-латина, работающего за исключением того, что слово начинается с согласного кластера (> 1 согласных).Почему мой javascript-свинг-латинский переводчик вставляет дополнительную запятую?

Вот моя функция:

function translatePigLatin(str) { 
    var firstVowel = str.indexOf(str.match(/[aeiou]/)); 
    if (firstVowel===0){ 
    return str + "way"; 
    } 
    else { 
    var charArray = str.split(""); 
    return charArray.slice(firstVowel, str.length).join("") + charArray.slice(0, firstVowel) + "ay"; 
    } 
} 

translatePigLatin("california") должен вернуть "aliforniacay", и делает.

translatePigLatin("glove") должен возвращать «oveglay», но он возвращает «oveg, lay».

Любые идеи, из которых начинается запятая?

+1

Отсутствует '.join (" ")' из второго '.slice' – JJJ

+0

Подсказка: это происходит потому, что вы стробируете массив. – robertklep

+0

@robertklep Это неправильный подход? Что было бы лучше? –

ответ

1

Я считаю, что вам нужно разбить строку на массив. Будет ли следующий удовлетворить ваши потребности ?:

function translatePigLatin(str) { 
 
    var firstVowel = str.indexOf(str.match(/[aeiou]/)); 
 
    return str.slice(firstVowel) + str.slice(0, firstVowel) + "ay"; 
 
} 
 
console.log(translatePigLatin("california")) 
 
console.log(translatePigLatin("glove"))

+0

Да, это лучший способ сделать это –

1

Интересно, что запятая исходит от array + "string" операции.

console.log([1,2] + "string") // Returns '1,2string'

В вашем случае - вы не присоединяющиеся второй (charArray.slice(0, firstVowel)) массив.