JavaScript bzw JQuery; Array auslesen und nach Variablen mit gleichem Wert suchen?
Hallo zusammen
Wie könnte ich in JavaScript bzw. Jquery ein Array auslesen und kontrollieren, ob ein Wert mehr als zwei mal vorkommt? (Ich mache dies für ein Kartenspiel, bei dem es nur jeweils zwei gleiche Karten geben kann). Gibt es für das irgendendeinen kokreten Befehl?
Vielen Dank im Voraus! (:
3 Antworten
Guten Abend Karsko,
ich habe Dir eine kleine Methode geschrieben, mit der Du Deine Anforderung in JavaScript umsetzen kannst. Der Code ist hoffentlich hinreichend kommentiert.
function check_duplicate(array){
// Sortieren des Arrays.
var sorted_array = array.slice().sort();
// Duplikate.
var results = [];
for (var counter = 0; counter < array.length - 1; counter ++) {
if (sorted_array[counter + 1] == sorted_array[counter ]) {
// Duplikat dem Ergebnisarray hinzufügen.
results.push(sorted_array[counter]);
}
}
// Duplikate zurückgeben.
return results;
}
Taucht ein Element 2 mal auf, so wird es als ein Duplikat erkannt. Wenn ein Element mehr als 2 mal im Array enthalten ist, wird es erneut als Duplikat erkannt. Z.B.: [2,3,2,2] liefert als Ergebnis ein Array mit den Duplikaten [2,2], denn die 2 ist zweimal als Duplikat vorhanden.
Testen kannst Du diese Methode exemplarisch mit dem folgenden Code:
var array = [2, 5, 6, 7, 3, 2, 1, 5];
alert(has_duplicates(array));
if(check_duplicate(array).length > 0)
{
alert("Duplikate im Array: " + check_duplicate(array));
} else {
alert("Es gibt keine doppelten Elemente im Array!");
}
Wenn Du eine Boolean-Methode möchtest, die nur prüft, ob Duplikate vorhanden sind, empfehle ich folgende Erweiterung:
function has_duplicates(array){
return check_duplicate(array).length > 0;
}
Bei Rückfragen kannst Du Dich gerne wieder melden!
Viele Grüße
André, savest8
Guten Abend,
jeder hat mal klein angefangen😉
Ich habe gerade Folgendes getestet:
<html> <script> function check_duplicate(array){
// Sortieren des Arrays.
var sorted_array = array.slice().sort();
// Duplikate.
var results = [];
for (var counter = 0; counter < array.length - 1; counter ++) {
if (sorted_array[counter + 1] == sorted_array[counter ]) {
// Duplikat dem Ergebnisarray hinzufügen.
results.push(sorted_array[counter]);
}
}
// Duplikate zurückgeben.
return results;
}
function has_duplicates(array){
return check_duplicate(array).length > 0;
}
//*** Ab hier Dein Code
var midcard = [1, 2, 3, 4, 3, 6, 6, 6];
var x = check_duplicate(midcard);
alert(x); </script> </html>
Meine Ausgabe lautet "3,6,6", was nach dem Algorithmus auch stimmt. Erwartest Du ein anderes Ergebnis?
Falls nein, kannst Du den Code, den ich Dir in diesem Kommentar beigefügt habe, einmal selbst testen.
Beste Grüße
André, savest8
Wenn du nur prüfen möchtest ob das Array doppelte (primitive) Werte enthält (nicht welche):
var containsDoubles = function(arr) {
return Object.keys(arr.reduce(function(accu, it) {
return accu[it] = true, accu;
}, {})).length !== arr.length;
}
containsDoubles([1,2,3]); //false containsDoubles([1,2,1]); //true
Schau mal in der Javascript API nach. Da finden sich bestimmt Methoden.
Hallo Andre,
Vielen Dank für deinen Code. Ich habe jedoch noch ein kleines Problem; wenn ich nach "results.push" ein alert result platziere, dann erhalte ich zwar die richtigen Werte, wenn ich dies jedoch außerhalb der Funktion tue, dann gibt er mir nur den ersten Wert zurück. Er kürzt die Werte sozusagen nur auf den Ersten und die anderen zeigt er nicht mehr an. Habe ich in meinem Code hier etwas falsch gemacht? Kann man ev. mit alert keine arrays wiedergeben?
Sorry ich bin erst ein blutiger Anfänger (:
Noch einen schönen Abend und Danke für deine Antwort.