2017-07-25 10 views
0

Ich habe mit for-Schleife mit 2-dimensionalen Array experimentiert, offensichtlich bin ich neu bei Javascript und Programmierung im Allgemeinen .. Ich versuche, eine Var innerhalb des Arrays zu finden, wenn gefunden dann Erfolgsmeldung ausgeben und wenn nicht eine fehlgeschlagen Botschaft. Jedes Mal, wenn ich den Code Ausgang die entsprechende Fehlermeldung machen es auf die nach wie vor zeigt Konsole 4-mal und die Erfolgsmeldung ..Javascript Wie kann ich die 'sonst' Ausgabe nur einmal ausgeben?

Erwartete ausgegeben, wenn nicht angezeigt wird:

No matching keyword was found 

Ergebnisausgabe:

The keyword String is found 
No matching keyword was found 
No matching keyword was found 
No matching keyword was found 
No matching keyword was found 

newArray = [["String","Sa"],[1,2,35]]; 


var find = "String"; 
for(var i=0; i< newArray.length;i++){ 
    for(var j=0; j < newArray.length + i; j++){ 
     if (newArray[i][j] === find){ 
      console.log("The keyword " + find + " is found"); 
     } else { 
      console.log("No matching keyword was found"); 
     } 
    } 

} 
+2

Methode 1: Verwenden Sie eine Variable, um anzuzeigen, es ausgegeben, bevor gewesen ist, und nicht ausgegeben. Methode 2: überdenken Sie Ihren Code, wie es aussieht, macht es nicht wirklich viel Sinn –

+0

Ich denke, Ihre "Schleife" ist gut. Es durchläuft alle Ihre Daten. Du hast 5 Items, also wird es sicher 5 Mal auch einen Vergleich machen. Wenn Sie sich bei jedem Vergleich anmelden, erhalten Sie insgesamt 5 Logs. 1 gefunden und der Rest wird nicht gefunden. – Jalil

+0

@Jalil danke für den Eingang –

Antwort

0

wie Genau das, was sie sagten, eine Variable als Indikator verwenden.

newArray = [["String","Sa"],[1,2,35]]; 


var find = "String"; 
var found = false; 
for(var i=0; i< newArray.length;i++){ 
    for(var j=0; j < newArray[i].length + i; j++){ 
     if (newArray[i][j] === find){ 
      console.log("The keyword " + find + " is found"); 
      found = true; 
     } 
    } 

} 
if (!found) { 
    console.log("No matching keyword was found"); 
} 

Bitte analysieren und vergleichen Sie unseren Code, um zu verhindern, dass Sie ähnliche Fragen in der Zukunft stellen.

Versuchen Sie jetzt, oben zu optimieren, indem Sie nicht über die anderen Elemente iterieren, nachdem wir "gefunden" haben, dass es übereinstimmt.

+0

Danke, ich sollte härter denken –

-3

Sie können die Anweisung break verwenden, um Schleifen vorzeitig zu beenden.

if (newArray[i][j] === find) { 
 
    console.log("The keyword " + find + " is found"); 
 
} else { 
 
    console.log("No matching keyword was found"); 
 
    break; 
 
}

-1

Verwenden Sie einen booleschen Wert, um ein Flag "isFound" zu speichern, und break on found.

newArray = [["String","Sa"],[1,2,35]]; 
var find = "String"; 
var isFound = false; 
for(var i=0; i< newArray.length;i++){ 
    for(var j=0; j < newArray.length + i; j++){ 
     if (newArray[i][j] === find){ 
      console.log("The keyword " + find + " is found"); 
      isFound = true; 
      break; 
     } 
    } 
} 
if (isFound == false){ 
console.log("No matching keyword was found"); 
} 
+0

@Kaiido bearbeitet haben. War VBA schreiben lol. – user2975716

0

Ihre zweite Schleife ist falsch.

In Ihrer inneren Schleife, müssen Sie Schleife auf newArray[i] Auch wenn Suche ist ein Erfolg, verwenden Sie break.

Verwenden Sie auch eine Variable, um anzuzeigen, dass der Vorgang beendet ist.

newArray = [["String","Sa"],[1,2,35]]; 

var find = "String"; 

    var end = false; 
    for(var i=0; i< newArray.length;i++){ 
     for(var j=0; j < newArray[i].length; j++){ 
       if (newArray[i][j] === find){ 
        console.log("The keyword " + find + " is found"); 
        end = true; 
        break; 
       } else { 
        console.log("No matching keyword was found"); 
       } 
      } 
      if (end) { 
       break; 
      } 
    } 
0

newArray = [["String","Sa"],[1,2,35]]; 
 

 

 
var find = "String"; 
 
for(var i=0; i< newArray.length;i++){ 
 
    for(var j=0; j < newArray[i].length + i; j++){// <--- you want to iterate only as many times as the inner array elements. Right now you iterate over the same array index as the first loop. 
 
     if (newArray[i][j] === find){ 
 
      alert("The keyword " + find + " is found"); 
 
      return; //<-- end script after result is found 
 
     } 
 
    } 
 
} 
 
//Will only get here if the return was not hit 
 
alert("No matching keyword was found");

Sie sehen es 4 mal, weil die Schleife läuft weiter, bis er über alles durchlaufen wurde. Eine Möglichkeit, das zu tun, was Sie wollen, ist, das Skript zu beenden, nachdem das Ergebnis gefunden wurde.

Wenn Sie den Slick es6 Ansatz nehmen möchten:

newArray = [["String","Sa"],[1,2,35,"String"]]; 
 
const term = "String2"; 
 
const isFound = newArray.some(e=>e.find(e=>e===term)); 
 
alert(`The keyword has ${isFound ? "" : "not"} been found`);

Verwandte Themen