Si tengo la siguiente matriz de objetos:
[ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]
¿Hay alguna manera de recorrer la matriz para verificar si ya existe un valor de nombre de usuario en particular y si no hace nada, pero si no lo hace, agregar un nuevo objeto a la matriz con dicho nombre de usuario (y nueva ID)?
¡Gracias!
id
? ¿Es posible que los elementos se eliminen de esta matriz, o podemos estar seguros de que el nuevo elemento siempre tendrá elid
mismo valorarr.length + 1
?Respuestas:
Supuse que los
id
s están destinados a ser únicos aquí.some
es una gran función para verificar la existencia de cosas en matrices:fuente
some
hace regresar un valor lógico.found
serátrue
ofalse
dependiendo de si se cumple la condición en la devolución de llamada.if (arr.some(function (el) { return el.Id == someId; })) { // do something }
. No lo olvidesreturn
o no recuperarás nada.Es bastante trivial verificar el nombre de usuario existente:
Pero no es tan obvio qué hacer cuando tiene que agregar un nuevo usuario a esta matriz. La salida más fácil: simplemente empujando un nuevo elemento con
id
igual aarray.length + 1
:Garantizará la unicidad de los ID, pero hará que esta matriz se vea un poco extraña si se quitan algunos elementos.
fuente
Estos pequeños fragmentos me funcionan ...
fuente
.some
aquí - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Creo que esta es la forma más corta de abordar este problema. Aquí he usado la función de flecha ES6 con .filter para verificar la existencia de un nuevo nombre de usuario agregado.
Enlace a violín
fuente
Esto es lo que hice además de la respuesta de @ sagar-gavhane
fuente
...
if(userExists) { const userId = userExists.id return userId; }
...
La respuesta aceptada también se puede escribir de la siguiente manera usando la función de flecha en .some
fuente
Me gusta la respuesta de Andy, pero la identificación no necesariamente será única, así que esto es lo que se me ocurrió para crear una identificación única también. También se puede verificar en jsfiddle . Tenga en cuenta que es
arr.length + 1
muy posible que no garantice una identificación única si se ha eliminado algo anteriormente.fuente
Podrías crear un prototipo de tu matriz para hacerla más modular, prueba algo como esto
Y puedes usarlo como:
fuente
Intenté los pasos anteriores por alguna razón, parece que no funciona para mí, pero esta fue mi solución final a mi propio problema, tal vez útil para cualquiera que lea esto:
aquí post.likes es una variedad de usuarios a los que les gustó una publicación.
fuente
prueba esto
primer método usando algunos
segundo método usando incluye, mapa
fuente
Supongamos que tenemos una matriz de objetos y desea verificar si el valor del nombre se define así,
fuente
Aquí hay una cadena de métodos ES6 que usa
.map()
y.includes()
:fuente
Las funciones nativas de la matriz a veces son entre 3 y 5 veces más lentas que los bucles normales. Además, las funciones nativas no funcionarán en todos los navegadores, por lo que hay problemas de compatibilidad.
Mi código:
De esta manera puede lograr resultados más rápido.
Nota: No he verificado si el parámetro pasado está vacío o no, si lo desea, puede marcarlo o escribir una expresión regular para una validación particular.
fuente
xorWith
en Lodash se puede usar para lograr estofuente
Compruébalo aquí:
https://stackoverflow.com/a/53644664/1084987
Puede crear algo como si la condición posterior, como
fuente
function number_present_or_not () {
var arr = [ 2,5,9,67,78,8,454,4,6,79,64,688 ] ;
var encontrado = 6; var encontrado_dos; para (i = 0; ifuente
La mejor práctica es así.
fuente