2016-07-31 8 views
-1

Warum funktioniert meine Lösung nicht für diese Herausforderung? (Link zur Herausforderung: https://www.freecodecamp.com/challenges/mutations)FreeCodeCamp Javascript-Herausforderung [Mutation] Was ist los mit meiner Lösung?

function mutation(arr) { 
    var first = arr[0].toLowerCase(); 
    var second = arr[1].toLowerCase(); 
    for (var i = 0; i < first.length; i++) { 
    if (first.indexOf(second[i]) === -1) { 
     return false; 
    } else { 
     return true; 
    } 
    } 
} 

mutation(["hello", "hey"]); 
+1

Sie sind nicht gehen, um mich googeln, sind Sie? Was ist die Herausforderung, was ist das erwartete Verhalten Ihres Codes und was ist sein tatsächliches Verhalten? –

+0

Rufen Sie die Funktion irgendwo auf und nutzen Sie die Rückgabewerte? – xCodeZone

+0

Ja. Der Aufruf: Mutation (["Hallo", "Hey"]); – veron

Antwort

0

benötigen nicht Schleife, weil Ihre Array-Größe 2 sowieso sein wird:

function mutation(arr) { 
 

 

 
    return arr[1].toLowerCase().split('').map((ch)=>arr[0].toLowerCase().indexOf(ch)>=0).every((e)=>e) 
 
} 
 

 
console.log(
 
    mutation(["hello","Hello"]) 
 
) 
 
console.log(
 
    mutation(["Alien", "line"]) 
 
) 
 
console.log(
 
    mutation(["hello","hey"]) 
 
)

-Code Erklären mit mutation(["Alien", "line"]) als Beispiel:

  • arr[1].toLowerCase().split('') => Split line auf Array ['l','i','n','e']

  • ['l','i','n','e'].map((ch)=>arr[0].toLowerCase().indexOf(ch)>=0) für jedes Zeichen, ob es auf dem ersten Elememt existiert arr[0] ==> Das Ergebnis [true,true,true,true]

  • den UND Logik Operator unter dem Übernehmen wird Ergebnis [true,true,true,true].every((e)=>e) ==>true & true & true & true

  • Das Ergebnis ist true

+0

Sie brauchen '.every' hier, nicht' reduce'. – georg

+0

Ich aktualisiere die Antwort und ich erkläre meine Lösung .. es ist Gelegenheit zu lernen :) –

+0

@georg: Danke für die Erinnerung .. AKTUALISIERT! '.jevery ((e) => e)' –

0

Sie müssen hier While Schleife besser als for Loop:

function mutation(arr) { 
 
    var j=0,first = arr[0].toLowerCase(),second = arr[1].toLowerCase(); 
 
    
 
    while(j<second.length && first.indexOf(second[j])>=0){ 
 
      j++; 
 
    } 
 
    return !(j===second.length-1) 
 
    
 
} 
 
    //-------- SAMPLES 
 
console.log(
 
    mutation(["hello", "Hello"]) 
 
) 
 

 
console.log(
 
    mutation(["hello", "hey"]) 
 
) 
 

 
console.log(
 
    mutation(["Alien", "line"]) 
 
)