sapere se semplice array ha duplicati possiamo confrontare primi e ultimi indici dello stesso valore :
La funzione:
var hasDupsSimple = function(array) {
return array.some(function(value) { // .some will break as soon as duplicate found (no need to itterate over all array)
return array.indexOf(value) !== array.lastIndexOf(value); // comparing first and last indexes of the same value
})
}
Test:
hasDupsSimple([1,2,3,4,2,7])
// => true
hasDupsSimple([1,2,3,4,8,7])
// => false
hasDupsSimple([1,"hello",3,"bye","hello",7])
// => true
Per un array di oggetti è necessario convertire i valori oggetti per un semplice array primo:
Converting matrice di oggetti per l'array semplice con map
:
var hasDupsObjects = function(array) {
return array.map(function(value) {
return value.suit + value.rank
}).some(function(value, index, array) {
return array.indexOf(value) !== array.lastIndexOf(value);
})
}
Test:
var cardHand = [
{ "suit":"spades", "rank":"ten" },
{ "suit":"diamonds", "rank":"ace" },
{ "suit":"hearts", "rank":"ten" },
{ "suit":"clubs", "rank":"two" },
{ "suit":"spades", "rank":"three" },
]
hasDupsObjects(cardHand);
// => false
var cardHand2 = [
{ "suit":"spades", "rank":"ten" },
{ "suit":"diamonds", "rank":"ace" },
{ "suit":"hearts", "rank":"ten" },
{ "suit":"clubs", "rank":"two" },
{ "suit":"spades", "rank":"ten" },
]
hasDupsObjects(cardHand2);
// => true
@AmiTavory C'è almeno una chiara differenza: la domanda esamina una matrice di primitivi ('arr = [9, 9, 9, 111, 2, 3, 3, 4, 4, 5, 7];), e guarda alla deduplicazione in base alle proprietà degli oggetti. Semantico, forse, ma le due risposte più votate non riguardano esattamente questo caso. '/ giphy più ne sai (mi rendo conto che non farò nulla) – ruffin
@ruffin Punto preso. Commento rimosso –