Man ir jāpārbauda JavaScript masīvs, lai redzētu, vai tajā nav dublējušās vērtības. Kāds ir vienkāršākais veids, kā to izdarīt? Man tikai jāatrod, kuras vērtības dublējas - man patiesībā nav vajadzīgi to indeksi vai to, cik reizes tās ir dublējušās.
Es zinu, ka es varu cilpu caur masīvu un pārbaudīt visas pārējās vērtības, lai atrastu sakritības, bet šķiet, ka vajadzētu būt vieglākam veidam.
Varētu masīvu sašķirot un pēc tam palaist to cauri, lai redzētu, vai nākamais (vai iepriekšējais) indekss ir tāds pats kā pašreizējais. Pieņemot, ka jūsu šķirošanas algoritms ir labs, tam vajadzētu būt mazāk nekā O(n2):
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);
Gadījumā, ja jums ir jāatgriež kā funkcija, kas paredzēta dublēšanās gadījumiem. Tas ir paredzēts līdzīga veida gadījumiem.
Varat pievienot šo funkciju vai pielāgot un pievienot to Javascript's masīva prototipam:
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);