Herhangi bir yinelenen değer olup olmadığını görmek için bir JavaScript dizisini kontrol etmem gerekiyor. Bunu yapmanın en kolay yolu nedir? Sadece yinelenen değerlerin ne olduğunu bulmam gerekiyor - aslında indekslerine veya kaç kez yinelendiklerine ihtiyacım yok.
Dizide döngü oluşturup diğer tüm değerlerin eşleşip eşleşmediğini kontrol edebileceğimi biliyorum, ancak daha kolay bir yolu olmalı gibi görünüyor.
Diziyi sıralayabilir ve sonra içinden geçerek bir sonraki (veya önceki) dizinin mevcut diziyle aynı olup olmadığına bakabilirsiniz. Sıralama algoritmanızın iyi olduğunu varsayarsak, bu işlem O(n2) değerinden daha az olmalıdır:
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);
Yinelemeler için bir işlev olarak dönecekseniz. Bu, benzer türdeki durumlar içindir.
Bu fonksiyonu ekleyebilir veya üzerinde değişiklik yaparak Javascript'in Array prototipine ekleyebilirsiniz:
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);