JavaScript Funktion: Wert in einem Array suchen und bei Fund true bzw. false ausgeben

od-boy

Ensign
Registriert
Nov. 2007
Beiträge
225
Hallo zusammen,

ich bin in Sachen Javascript ein totaler Anfänger. Die Suchfunktion konnte mir leider keine Lösungen zu meinem Anliegen bieten.

Meine Aufgabe:

Schreibe eine Funktion in_array(), die zwei Argumente besitzt; einen array und einen Wert, und true bzw. false ausgibt, wenn der Wert im array vorhanden bzw. nicht vorhanden ist.


Ich habe mir folgendes überlegt:

Code:
<script>

function in_array(a, v) {

var a = new Array("January", "February", "March", "April", "May", "June", "July");
var v = "May";
	
for(var i = 0; i < a.length; i++)
	if(a[i] == v) {
        return true;
	}
		
else {
	return false;
	}
}
</script>

Wieso funktioniert das nicht, was mache ich falsch? Ich stehe da auf dem Schlauch.

Danke und Grüße,
od-boy
 
Zuletzt bearbeitet: (Englisch zu Deutsch übersetzt)
1. Du definierst eine Funktion mit den Parametern a und v
2. Du überschreibst die variablen a und v
3. Du rufst die Funktion gar nie auf
4. Die Funktion wird immer false zurückliefern, es sei denn, das erste Element ist das gesuchte.
 
Ich glaube das Überschreiben ist nur zum testen.
Der Fehler liegt im return false.
Sobald das erste Element nicht dem gesuchten entspricht, ist die Methode beendet.
Lösung:
Die else entfernen und außerhalb der for-Schleife "return false".
 
Zuletzt bearbeitet:
Danke für die Antworten.

Ich habe den Source Code soweit überarbeitet:
Code:
<script>
     
    function in_array(array, value) {
     
    var a = new Array("January", "February", "March", "April", "May", "June", "July");
    var v = "May";
    for(var i = 0; i < a.length; i++)
    if(a[i] == v) {
    return true;
    }
    
    return false;
    
    }
</script>

Hmm... Ich habe die Argumente in der Funktion nun zu array und value umbenannt, damit die Variablen nicht überschrieben werden, richtig? Wie rufe ich die Funktion auf? Zum Beispiel durch result = in_array?
 
array ist kein gültiger Variablenname. Und das array hat immernoch nichts in der Funktion verloren.

Code:
<script>
     
function in_array(a, v)
{
    for(var i = 0; i < a.length; i++) {
      if(a[i] == v)
        return true;
    }
    
    return false;
}

var blah = new Array("January", "February", "March", "April", "May", "June", "July");
if (in_array(blah, "May"))
  document.writeln("yai, in array!");

</script>
 
Ich danke dir für den Code. Das funktioniert aber nur für den "true"-Part... Wenn ich jetzt zum Beispiel May aus dem Array lösche oder v anders benenne, kommt keine "false"-Meldung raus?
 
Das Beispiel von Bullet funktioniert absolut korrekt.
Man kann sogar komplett ohne Schleife auskommen, wenn man die Methode "indexOf" nutzt. Das geht aber schon tiefer in die JavaScript Welt :D
Vielleicht noch als Tipp: Sobald ein "retrun" ausgeführt wird, ist die Funktion beendet. Egal was danach kommt. Deshalb ging dein erstes Beispiel auch nicht.

Code:
function in_array(a, v) {
    if (a.indexOf(v) > -1) {
        return true;
    }
    return false;
}
 
@od-boy: Code zeigen.

@T0a5tbr0t: Dann könnte man auch folgendes machen (und eigentlich die ganze in_array funktion weglassen). Aber das war ja nicht das ziel.

Code:
function in_array(a, v) {
  return (a.indexOf(v) > -1);
}
 
Ich danke euch, ich habe nun alles verstanden! :)
 
Zurück
Oben