JavaScript: scrittura Funzione che esegue Pig latino sulla frase; Attraverso sembra dare uscita strano

sto cercando di scrivere codice che fa latino di maiale. le due regole principali sono le seguenti:

  • regola 1: se una parola inizia con un suono vocale, aggiungere un suono “ay” alla fine della parola.
  • regola 2: se una parola inizia con un suono consonante, spostare la consonante alla fine della parola. poi finire aggiungendo un suono “ay” alla fine della parola.

ci sono alcune regole che non ho intenzione di precisare qui, ma sono inclusi nel mio codice.

const pigify = (str) => { let sentSplit = str.split(' ') let newArray = []; for (let i = 0; i < sentSplit.length; i++) { let element = sentSplit[i] console.log(element) // counts 'qu' as a consonant even when it's preceded by a consonant if (!['a', 'e', 'i', 'o', 'u'].includes(element[0]) && (element.slice(1, 3) === 'qu')) { newArray.push(`${element.slice(3)}${element.slice(0,3)}ay`) } // translates a word beginning with three consonants // counts 'sch' as a single phoneme else if (!['a', 'e', 'i', 'o', 'u'].includes(element[0]) && !['a', 'e', 'i', 'o', 'u'].includes(element[1]) && !['a', 'e', 'i', 'o', 'u'].includes(element[2]) || (element.slice(0, 3) === 'sch') ) { newArray.push(`${element.slice(3)}${element.slice(0,3)}ay`) } // translates a word beginning with two consonants // counts 'qu' as a single phoneme else if (!['a', 'e', 'i', 'o', 'u'].includes(element[0]) && !['a', 'e', 'i', 'o', 'u'].includes(element[1]) || (element.slice(0, 2) === 'qu') ) { newArray.push(`${str.slice(2)}${str.slice(0,2)}ay`) } // translates a word beginning with a consonant else if (!['a', 'e', 'i', 'o', 'u'].includes(element[0])) { newArray.push(`${str.slice(1)}${str[0]}ay`) } // translates a word beginning with a vowel else if (['a', 'e', 'i', 'o', 'u'].includes(element[0])) { newArray.push(`${element}ay`) } } return newArray.join('') } const pigLatinString = pigify('the quick brown fox'); console.log(pigLatinString);

mi aspetto che l’output della variabile pigLatinString sia:

ethay ickquay ownbray oxfay

ma invece il mio codice ritorna:

'e quick brown foxthaye quick brown foxthaye quick brown foxthayhe quick brown foxtay'

cosa faccio di sbagliato?

EN From: JavaScript: Write Function That Executes Pig Latin on Phrase; Looping Through Appears to Give Strange Output

More similar articles:

15 Comments

  1. non copre le casse dei bordi:

    considerare la rottura di diversi “compiti” in diverse “funzioni” per la leggibilità e scopi di debug.

    const startsWithVowel = letter => {
    const vowels = ['a', 'e', 'i', 'o', 'u'];
    if (vowels.includes(letter)) return true;
    };

    const turnPigLatin = str => {
    const firstLetter = str.charAt(0);
    if (startsWithVowel(firstLetter)) {
    return str + 'yay';
    } else {
    return str.substr(1) + str.charAt(0) + 'ay';
    }
    };

    const pigify = sentence => {
    const words = sentence.split(' ');
    return words.map(word => turnPigLatin(word)).join(' ');
    };

    console.log(pigify('The quick brown fox'));

    1. grazie per l’esempio sopra. ha senso suddividere i compiti in diverse funzioni. sto indovinando se dovessi aggiungere casi bordo allora ogni caso bordo sarebbe una nuova funzione che viene rappresentato in turnPigLatin funzione?

    2. Oh mie scuse @PineNuts0, E ‘un compito tipico compiti però. certo, si potrebbe rompere tale che ogni caso bordo è una nuova funzione. in generale è buona norma avere piccole funzioni, che svolgono un piccolo compito. in questo modo se qualcosa fallisce, si sa che cosa è il colpevole. controlla la programmazione funzionale per maggiori informazioni!

  2. avere una lunga funzione fare molte cose diverse è il motivo per cui avete problemi a capire ciò che manca nel vostro codice. rompere il codice in diverse funzioni che sono responsabili di piccoli compiti….

Leave a Reply

Your email address will not be published. Required fields are marked *