Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 62 additions & 4 deletions 02week/pigLatin.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,81 @@ const rl = readline.createInterface({
output: process.stdout
});

//global variables
const theVowels = ['a', 'e', 'i', 'o', 'u'];
let doesItContainVowel=false;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping this in the global scope is dangerous as it can be overwritten. Think of another way to write your code so that this accessible only when needed.


function pigLatin(word) {
//ascii keyboard lowercase values a-z are 97 to 122
// compare and check for values of the characters in string
// to not be outside of this range, if not in range return false
const isValid = (word) => {
for(const letter of word){
if(letter <'a' || letter >'z'){
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refactor this and test the true first. If you return true first, the false is implicit. Also, you could shorten even further. Really neat trick here, btw

return false;
}
}
return true;
}

// Your code here
// put string into a new array with split()
// forEach loop to check each vowel to see if returns a valid indexOf
// if finds valid index in firstArr, will push index number to uptoVowel array
// and assign global variable doesItContainVowel to true
const findVowelIndex = (anotherWord) => {
const uptoVowel = [];
const firstArr = anotherWord.split('');
doesItContainVowel=false;

theVowels.forEach( (element) => {
if(firstArr.indexOf(element) !== -1){
uptoVowel.push(firstArr.indexOf(element));
doesItContainVowel=true;
}
});
// sort arranges smallest index number at the beginning of array
// returns the index number to parent function
uptoVowel.sort()
return uptoVowel[0];
}

//function will return word in piglatin
//will trim white space and make lowercase then call function isValid
//to make sure user entered valid input
const pigLatin = (word) => {

const wordTrimmedLowerCase = word.trim().toLowerCase();
if (wordTrimmedLowerCase && isValid(wordTrimmedLowerCase)) {

//findVowelIndex() will return the index of first vowel
const theVowelIndex=findVowelIndex(wordTrimmedLowerCase);

// if global variable doesItContainVowel was set to false
if(doesItContainVowel===false){
return "Enter a regular word!!";
}else{
if(theVowelIndex===0){
return wordTrimmedLowerCase+'yay';
}else{
return `${wordTrimmedLowerCase.substr(theVowelIndex)}${wordTrimmedLowerCase.substr(0,theVowelIndex)}ay`;
}
}

} else {
return "Enter a word";
}

}


function getPrompt() {
rl.question('word ', (answer) => {
console.log( pigLatin(answer) );
console.log(pigLatin(answer));
getPrompt();
});
}

// Tests

// Tests
if (typeof describe === 'function') {

describe('#pigLatin()', () => {
Expand Down