2016-04-03 11 views
1

Ich versuche, ein Problem mit meinem sehr begrenzten Wissen von Javascript zu lösen.Elemente in einem Array zählen und vergleichen, Javascript

Ich habe versucht, eine Möglichkeit zu erstellen, wie oft ein bestimmter Buchstabe in einem Array angezeigt wird und wie oft ein anderer Buchstabe im selben Array angezeigt wird.

Ich bin in der Lage, 3 aus 4 Tests bestehen und habe den Code viele Male versucht, so viele Methoden wie ich weiß.

Ich weiß, dass das, was ich getan habe, nicht effizient ist ... nur an der Problemlösung mit ein paar Wochen Erfahrung zu arbeiten.

Alle Eingaben schätzen. Vielen Dank.

function isValidWalk(walk) { 
 
var north = new Object(); 
 
var south = new Object(); 
 
var east = new Object(); 
 
var west = new Object(); 
 
for (var i = 0; i <walk.length; i++){ 
 
if (walk[i] == "n") 
 
{north.input = "x"} 
 
} 
 
for (var i = 0; i <walk.length; i++){ 
 
if (walk[i] == "s") 
 
{south.input = "x"} 
 
} 
 
for (var i = 0; i <walk.length; i++){ 
 
if (walk[i] == "e") 
 
{east.input = "x"} 
 
} 
 
for (var i = 0; i <walk.length; i++){ 
 
if (walk[i] == "w") 
 
{west.input = "x"} 
 
} 
 

 

 

 
if (north.input == south.input && east.input == west.input && walk.length==10) { 
 
return true; 
 
} 
 
else { 
 
return false; 
 
} 
 
}

+0

bitte den Inhalt zu Fuß hinzufügen. –

+0

Eine Sache, die sofort in den Sinn kommt: Warum all diese 'For'-Schleifen, wenn Sie nur eine verwenden können, und alle Ihre Tests darin durchführen? – blex

+0

Sie benötigen keine Mehrfachschleifen. Verwenden Sie stattdessen nur einen mit 'switch (walk [i])' '. – Andy

Antwort

0

Hier ist, wie ich es tun würde:

function isValidWalk(walk) { 
 
    var steps = {n: 0, s: 0, e: 0, w: 0}; 
 

 
    for (var i=0, l=walk.length; i<l; i++) { 
 
     if (steps.hasOwnProperty(walk[i])) { 
 
      steps[walk[i]]++; 
 
     } else { 
 
      return false; // The element is not "n","s","e", or "w" 
 
     } 
 
    } 
 

 
    return (steps.n == steps.s && steps.e == steps.w && walk.length == 10); 
 
} 
 

 
console.log(isValidWalk(['n','n','n','s','n','s','n','s','n','s'])); // returns false 
 
console.log(isValidWalk(['n','n','n','s','s','s','n','s']));   // returns false 
 
console.log(isValidWalk(['n','gg','hh','s','s','s','n','s','n','n'])); // returns false 
 
console.log(isValidWalk(['n','n','n','s','s','s','n','s','n','s'])); // returns true

+0

Bitte verwenden Sie 'for ... in' nicht für Arrays. –

+1

@NinaScholz Okay, ich habe es geändert. – blex

+0

Vielen Dank dafür. Ich habe auch mit Schalter umgeschrieben und beide Versionen bestanden. Außerdem habe ich von der hasOwnProperty-Methode erfahren. – Fountainhead

Verwandte Themen