validacion - validar formulario javascript html5
En Javascript, ¿cómo verifico si una matriz tiene valores duplicados? (3)
Posible duplicado:
La forma más fácil de encontrar valores duplicados en una matriz javascript
¿Cómo verifico si una matriz tiene valores duplicados?
Si algunos elementos de la matriz son iguales, devuelva verdadero. De lo contrario, devuelve falso.
[''hello'',''goodbye'',''hey''] //return false because no duplicates exist
[''hello'',''goodbye'',''hello''] // return true because duplicates exist
Bueno, hice un poco de búsqueda en Internet para ti y encontré este enlace útil.
La forma más fácil de encontrar valores duplicados en una matriz de JavaScript
Puede adaptar el código de muestra que se proporciona en el enlace anterior, cortesía de "swilliams" a su solución.
Otro enfoque (también para los elementos objeto / matriz dentro de la matriz 1 ) podría ser 2 :
function chkDuplicates(arr,justCheck){
var len = arr.length, tmp = {}, arrtmp = arr.slice(), dupes = [];
arrtmp.sort();
while(len--){
var val = arrtmp[len];
if (/nul|nan|infini/i.test(String(val))){
val = String(val);
}
if (tmp[JSON.stringify(val)]){
if (justCheck) {return true;}
dupes.push(val);
}
tmp[JSON.stringify(val)] = true;
}
return justCheck ? false : dupes.length ? dupes : null;
}
//usages
chkDuplicates([1,2,3,4,5],true); //=> false
chkDuplicates([1,2,3,4,5,9,10,5,1,2],true); //=> true
chkDuplicates([{a:1,b:2},1,2,3,4,{a:1,b:2},[1,2,3]],true); //=> true
chkDuplicates([null,1,2,3,4,{a:1,b:2},NaN],true); //=> false
chkDuplicates([1,2,3,4,5,1,2]); //=> [1,2]
chkDuplicates([1,2,3,4,5]); //=> null
1 necesita un navegador que admita JSON, o una biblioteca JSON si no es así.
2 editar: la función ahora se puede usar para una simple comprobación o para devolver una matriz de valores duplicados
Si tiene un entorno ES2015 (a partir de este escrito: io.js, IE11, Chrome, Firefox, WebKit todas las noches), lo siguiente funcionará y será rápido (a saber, O (n)):
function hasDuplicates(array) {
return (new Set(array)).size !== array.length;
}
Si solo necesita valores de cadena en la matriz, lo siguiente funcionará:
function hasDuplicates(array) {
var valuesSoFar = Object.create(null);
for (var i = 0; i < array.length; ++i) {
var value = array[i];
if (value in valuesSoFar) {
return true;
}
valuesSoFar[value] = true;
}
return false;
}
Utilizamos una "tabla hash" valuesSoFar
cuyas claves son los valores que hemos visto en la matriz hasta ahora. Hacemos una búsqueda utilizando para ver si ese valor ya se ha detectado; Si es así, salimos del bucle y devolvemos true
.
Si necesita una función que funcione para algo más que valores de cadena, lo siguiente funcionará, pero no es tan eficaz; es O (n 2 ) en lugar de O (n).
function hasDuplicates(array) {
var valuesSoFar = [];
for (var i = 0; i < array.length; ++i) {
var value = array[i];
if (valuesSoFar.indexOf(value) !== -1) {
return true;
}
valuesSoFar.push(value);
}
return false;
}
La diferencia es simplemente que usamos una matriz en lugar de una tabla hash para valuesSoFar
, ya que las "tablas hash" de JavaScript (es decir, los objetos) solo tienen claves de cadena. Esto significa que perdemos el tiempo de búsqueda O (1) in
lugar de obtener un tiempo de búsqueda O (n) de indexOf
.