JQuery: ¿Eliminar elementos duplicados?

Supongamos que tengo una lista de enlaces con valores duplicados de la siguiente manera:

Book Magazine Book Book DVD DVD DVD Book 

¿Cómo podría, usando JQuery, eliminar los dups y quedarme con lo siguiente, por ejemplo:

 Book Magazine DVD 

Básicamente, estoy buscando una manera de eliminar cualquier valor duplicado encontrado y mostrar 1 de cada enlace.

 var seen = {}; $('a').each(function() { var txt = $(this).text(); if (seen[txt]) $(this).remove(); else seen[txt] = true; }); 

Explicación:

seen es un objeto que mapea cualquier texto visto previamente a true . Funciona como un conjunto que contiene todos los textos vistos anteriormente. La línea if (seen[txt]) comprueba si el texto está en el conjunto. Si es así, hemos visto este texto antes, por lo que eliminamos el enlace. De lo contrario, este es un texto de enlace que vemos por primera vez. Lo agregamos al conjunto para que se eliminen todos los enlaces con el mismo texto.

Una forma alternativa de representar un conjunto es usar una matriz que contenga todos los valores. Sin embargo, esto lo haría mucho más lento ya que para ver si hay un valor en la matriz, necesitaríamos escanear toda la matriz cada vez. Buscar una clave en un objeto utilizando seen[txt] es muy rápido en comparación.

Use el método jQuery $ .unique ()

Detalle ver en http://api.jquery.com/jQuery.unique/

 // use an object as map var map = {}; $("a").each(function(){ var value = $(this).text(); if (map[value] == null){ map[value] = true; } else { $(this).remove(); } }); 
 $(document).ready(function(){ $("select").each(function () { var selectedItem = $(this).find('option').filter(':selected').text(); var selectedItemValue = $(this).find('option').filter(':selected').val(); $(this).children("option").each(function(x){ if(this.text == selectedItem && $(this).val() != selectedItemValue) { $(this).remove(); } }); }); }); 

@interjay @Georg Fritzsche

Tu corrección no funcionó en mi caso, así que construí una versión diferente:

 var seen=''; $('a').each(function(){ var see=$(this).text(); if(seen.match(see)){ $(this).remove();} else{ seen=seen+$(this).text(); } }); 

Espera que esto le brinde a alguien más una solución alternativa alternativa válida por si acaso.

Una manera rápida y fácil sería

 $("a").​​​​​​​​each(function(){ if($(this).parent().length) $("a:contains('" + $(this).html() + "')").not(this).remove(); });​ 

Buena gente de soluciones. Aquí esta el mio

 for (i = 0; i < $('li').length; i++) { text = $('li').get(i); for (j = i + 1; j < $('li').length; j++) { text_to_compare = $('li').get(j); if (text.innerHTML == text_to_compare.innerHTML) { $(text_to_compare).remove(); j--; maxlength = $('li').length; } } } 

Saludos

 $('.photo').each(function (index) { if (index > 0) { $(this).remove(); } });