validar validacion vacios objetos formularios formulario enviar ejemplos ejemplo con campos array antes javascript

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



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

Ver también...

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 .