Ich muss ein JavaScript-Array überprüfen, um zu sehen, ob es irgendwelche doppelten Werte gibt. Was ist der einfachste Weg, dies zu tun? Ich brauche nur zu finden, was die doppelten Werte sind - ich don't wirklich brauchen ihre Indizes oder wie oft sie dupliziert werden.
Ich weiß, ich kann Schleife durch das Array und überprüfen Sie alle anderen Werte für eine Übereinstimmung, aber es scheint, wie es sollte ein einfacher Weg sein.
Sie könnten das Array sortieren und dann durchlaufen, um zu sehen, ob der nächste (oder vorherige) Index mit dem aktuellen übereinstimmt. Vorausgesetzt, Ihr Sortieralgorithmus ist gut, sollte dies weniger als O(n2) sein:
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var sorted_arr = arr.slice().sort(); // You can define the comparing function here.
// JS by default uses a crappy string compare.
// (we use slice to clone the array so the
// original array won't be modified)
var results = [];
for (var i = 0; i < sorted_arr.length - 1; i++) {
if (sorted_arr[i + 1] == sorted_arr[i]) {
results.push(sorted_arr[i]);
}
}
console.log(results);
Für den Fall, dass Sie als Funktion für Duplikate zurückkehren sollen. Dies ist für ähnliche Art von Fall.
Sie können diese Funktion hinzufügen, oder sie optimieren und zum Javascript's Array Prototyp hinzufügen:
Array.prototype.unique = function () {
var r = new Array();
o:for(var i = 0, n = this.length; i < n; i++)
{
for(var x = 0, y = r.length; x < y; x++)
{
if(r[x]==this[i])
{
alert('this is a DUPE!');
continue o;
}
}
r[r.length] = this[i];
}
return r;
}
var arr = [1,2,2,3,3,4,5,6,2,3,7,8,5,9];
var unique = arr.unique();
alert(unique);
Die Prototype-Bibliothek hat eine uniq-Funktion, die das Array ohne die Duplikate zurückgibt. Das ist aber nur die Hälfte der Arbeit.