2013-03-19 5 views
2

Итак, я пытаюсь создать функцию, которая позволяет пользователю вводить строку, а затем выводит строку в лайнере свиньи. Вот моя функция в настоящее время:Изменение каждого слова массива

function wholePigLatin() { 
      var thingWeCase = document.getElementById("isLeaper").value; 
      thingWeCase = thingWeCase.toLowerCase(); 
      var newWord = (thingWeCase.charAt(0)); 

      if (newWord.search(/[aeiou]/) > -1) { 
       alert(thingWeCase + 'way') 
      } else { 
       var newWord2 = thingWeCase.substring(1, thingWeCase.length) + newWord + 'ay'; 
       alert(newWord2) 
      } 
     } 

Как я могу получить его так, что он распознает каждое слово и затем изменяет каждое слово так, что я выше?

+1

если это только простая строка, то я думаю, что вам нужно разбить строку на основе пространств ==> Разделить (»«) ; –

ответ

0

Используйте метод split() для javascript. В этом случае вы можете сделать do var arrayOfWords = thingWeCase.split(" ") Это разделяет строку на массив строк, причем точка разделения находится в каждом пространстве. Затем вы можете легко пройти через каждый элемент результирующего массива.

+0

Отлично! Я вижу, что вы там делаете. Как только я разделяю массив с этой новой переменной, как я могу отправить каждую часть массива через функцию? –

+0

хорошо, это до вас. Я сделал бы цикл for и прохожу через каждый элемент, выполняя латинский метод свиньи для каждого элемента. В конце вы можете объединить их вместе, используя 'var sentence = str1 +" "+ str2 ...' – Cristiano

+1

@AlanJosephSylvestre https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/ карта – Andreas

0

Написать функцию, которая вызывает ваш однословные функцию в цикле:

function loopPigLatin(wordString) { 
    words = wordString.split(" "); 
    for(var i in words) 
    words[i] = wholePigLatin(words[i]); 
    return words.join(" "); 
} 

Конечно, чтобы назвать это так, вы хотите, чтобы сделать небольшие изменения в исходной функции:

function wholePigLatin(thingWeCase) { 
    // everything after the first line 
    return newWord2; // add this at the end 
} 

А затем вызвать loopPigLatin так:

document.getElementById("outputBox").innerHTML = loopPigLatin(document.getElementById("isLeaper").value); 
1

Измените функцию, чтобы принять аргумент и возвращает значение

function wholePigLatin(thingWeCase) { 
    thingWeCase = thingWeCase.toLowerCase(); 
    var newWord = (thingWeCase.charAt(0)); 

    if (newWord.search(/[aeiou]/) <= -1) { 
     newWord = thingWeCase.substring(1, thingWeCase.length) + newWord + 'ay'; 
    } 
    else{ 
     newWord = thingWeCase + 'way'; 
    } 
    return newWord; 
} 

, то вы можете сделать это:

var pigString = str.split(" ").map(wholePigLatin).join(" "); 

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

В качестве альтернативы вы можете получить массив и разделить/объединить его в пределах функции, если вы всегда захотите получить данные из того же источника.

+0

Похоже, что ti будет работать именно так! Где я могу поместить var pigString в функцию? –

+0

Вот скрипка с примером использования. Именно то, как вы его используете, зависит от того, что вы делаете со строкой и откуда вы берете оригинал. http://jsfiddle.net/eSgC2/2/ –

0

Вы можете просто соответствовать словам с регулярным выражением, и заменить их обратный вызов:.

var toPigLatin = (function() { 
    var convertMatch = function (m) { 
     var index = m.search(/[aeiou]/); 
     if (index > 0) { 
      return m.substr(index) + m.substr(0,index) + 'ay'; 
     } 
     return m + 'way'; 
    }; 
    return function (str) { 
     return str.toLowerCase().replace(/(\w+)/g, convertMatch); 
    }; 
}()); 

console.info(toPigLatin("lorem ipsum dolor.")); // --> oremlay ipsumway olorday. 
Смежные вопросы