2010-12-03 45 views
6

Tengo una matriz de jQuery:¿Cómo encontrar los duplicados en una matriz usando jQuery

var arr = $('input[name$="recordset"]'); 

estoy recibiendo el valor de la matriz como 8 o 6

Si los valores de la matriz se repiten o duplicar lo que necesito para mostrar "no repita los valores". Si no, necesito seguir adelante.

Uso de jQuery ¿alguien me puede decir cómo encontrar los valores duplicados?

+0

http://api.jquery.com/jQuery.unique/ podría ser útil – jAndy

+1

@kumar Eso no es una formación. Es un objeto jQuery. –

+0

Gracias JAndy .. Jquery.Unique es trabajo para elementos DOM. – kumar

Respuesta

13
var unique_values = {}; 
var list_of_values = []; 
$('input[name$="recordset"]'). 
    each(function(item) { 
     if (! unique_values[item.value]) { 
      unique_values[item.value] = true; 
      list_of_values.push(item.value); 
     } else { 
      // We have duplicate values! 
     } 
    }); 

Lo que estamos haciendo es crear un hash para listar los valores que ya hemos visto, y una lista para almacenar todos los valores únicos. Por cada entrada que devuelve el selector, estamos verificando si ya hemos visto el valor, y si no, lo estamos agregando a nuestra lista y y lo agregamos a nuestro hash de valores ya vistos.

+1

@Sean Lo recomiendo: 'var val = $ (elemento) .val(); 'y luego trabajar con val en lugar de item.value. El razonamiento detrás de esto: el valor de un elemento de formulario no siempre está en su atributo de valor; también puede ser el contenido de texto del elemento. –

+0

@ Šime - No puedo decir que alguna vez me he encontrado con eso. Para mi información, ¿a qué elementos del formulario se aplicaría esto? –

+0

@Sean Iré a comprobar ... dame un segundo. –

1
// For every input, try to find other inputs with the same value 
$('input[name$="recordset"]').each(function() { 
    if ($('input[name$="recordset"][value="' + $(this).val() + '"]').size() > 1) 
     alert('Duplicate: ' + $(this).val()); 
}); 
+2

La API dice que unique() solo funciona para matrices de elementos DOM. –

+0

@Sime vidas - Corregido :) –

+0

Gracias Tiu Talk ... pero mi matriz siempre está comprobando con 0 no me permite consultar con otros valores ... como 1 2 3 gracias – kumar

1

la esperanza de que a continuación fragmentos ayudará si alguien busca este tipo de requerimiento

var recordSetValues = $('input[name$="recordset"]').map(function() { 
      return this.value; 
     }).get();  
var recordSetUniqueValues = recordSetValues.filter(function (itm, i, a) { 
      return i == a.indexOf(itm); 
     }); 
if (recordSetValues .length > recordSetUniqueValues.length) 
     { alert("duplicate resource") } 
1
$('form').submit(function(e) { 

    var values = $('input[name="recordset[]"]').map(function() { 
     return this.value; 
    }).toArray(); 

    var hasDups = !values.every(function(v,i) { 
     return values.indexOf(v) == i; 
    }); 
    if(hasDups){ 
     // having duplicate values 
     alert("please do not repeat the values"); 
     e.preventDefault(); 
    } 

}); 
Cuestiones relacionadas