JavaScript bzw JQuery; Array auslesen und nach Variablen mit gleichem Wert suchen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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

Karsko 
Fragesteller
 22.01.2017, 21:00

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?

var midcard = [1, 2, 3, 4, 3, 6, 6, 6];

var x = check_duplicate(midcard);
alert(x);

 Sorry ich bin erst ein blutiger Anfänger (: 

 Noch einen schönen Abend und Danke für deine Antwort. 

0
savest8  22.01.2017, 21:12
@Karsko

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

0
Karsko 
Fragesteller
 22.01.2017, 22:54
@savest8

Hallo Andre,

Jetzt hat es endlich geklappt und funktioniert einwandfrei. 

Vielen Dank für deine Mühe und freundliche Grüße 

0
savest8  22.01.2017, 23:07
@Karsko

Guten Abend Karsko, 

kein Problem😉 Ich helfe doch gerne. Super, dass es jetzt funktioniert👍 Melde Dich wieder, wenn Du Fragen zu JavaScript hast.

Viele Grüße und gute Nacht

André, savest8

0

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.