2017-01-13 4 views
-2

Ich möchte meinen Code prägnanter machen, ohne die replace() Methode zu verwenden.Wie kann ich diesen Code prägnanter machen

eine Funktion royalWe (Satz) schreiben, die einen String zurückgibt, wo:

  • Jedes 'I' mit 'wir'
  • Jedes Wort ersetzt wird 'mein' mit 'uns'
  • ersetzt
  • jedes Wort ‚mein‘ ist mit ‚unserer‘
  • jedes Wort ‚ich‘ ersetzt wird ersetzt mit „uns“

Beispiele:

royalWe("I want to go to the store") =>
royalWe("This is mine") => "Das ist unsere"
royalWe("Jump for my love") => "Jump for our love"
royalWe("This is my house and you will respect me") => „Das ist unser Haus, und Sie werden respektieren "wir in den Laden gehen wollen" „us

Mein Code:

function royalWe(sentence){ 
    var sent = sentence.split(" "); 
    var newSent = []; 
    var replaceWords = ["I","mine","my","me"]; 
    var words = ["we","ours","our","us"] 

    for(var i = 0; i < sent.length; i++) { 
     var idxofchar = replaceWords.indexOf(sent[i]); 
     if(idxofchar !== -1) { 
     var word = sent[i].split(sent[i]).join(words[idxofchar]) 
     newSent.push(word); 
     } else { 
     newSent.push(sent[i]); 
     } 

    } 
    return newSent.join(" "); 

} 
+4

Wenn Ihr Code in der Minute arbeitet, und es gibt kein Problem, könnte man mehr Glück zu fragen an [Code Review] (http://codereview.stackexchange.com/) hat. Fragen, die nach Verbesserungen des Arbeitscodes fragen, sind für Stack Overflow kein Thema. – Aurora0001

+0

Gibt es eine Anforderung, funktionale Programmierung zu verwenden? Hast du schon davon erfahren? Wenn nicht, schlage ich folgende Übungen vor: [react.io funktionale JS] (http://reactivex.io/learnrx/) –

Antwort

0

mit funktionellen Methoden und keine reguläre Ausdrücke, würden Sie wahrscheinlich die for Schleife mitersetzen 210. Sie können die Ersetzungszeichenfolgen auch als Schlüsselwertzuordnungen in einem Objekt statt in zwei parallelen Arrays speichern.

function royalWe(sentence) { 
 
    var replacements = { I: "we", mine: "ours", my: "our", me: "us" }; 
 
    return sentence 
 
    .split(" ") 
 
    .map(function(word) { return replacements[word] || word; }) 
 
    .join(" "); 
 
} 
 

 
console.log(royalWe("I want to go to the store")); 
 
console.log(royalWe("This is my house and you will respect me")); 
 
console.log(royalWe("This is mine")); 
 
console.log(royalWe("Jump for my love"));

Wenn Sie String.prototype.replace verwenden, wäre es effizienter sein, und der Code wäre ziemlich ähnlich sein. Eine Regex, die Sie verwenden könnten, ist /[a-z]+/gi, die jede Zeichenkette mit 1 oder mehr alphanumerischen Zeichen auswählt.

function royalWe(sentence) { 
 
    var replacements = { I: "we", mine: "ours", my: "our", me: "us" }; 
 
    return sentence.replace(/[a-z]+/gi, function(word) { 
 
    return replacements[word] || word; 
 
    }); 
 
} 
 

 
console.log(royalWe("I want to go to the store")); 
 
console.log(royalWe("This is my house and you will respect me")); 
 
console.log(royalWe("This is mine")); 
 
console.log(royalWe("Jump for my love"));

Verwandte Themen