Se eu tiver a seguinte matriz de objetos:
[ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]
Existe uma maneira de percorrer a matriz para verificar se já existe um valor de nome de usuário específico e se não faz nada, mas se não adicionar um novo objeto à matriz com o nome de usuário (e o novo ID)?
Obrigado!
id
? É possível que os elementos sejam removidos dessa matriz ou podemos ter certeza de que o novo elemento sempre seráid
igual aarr.length + 1
?Respostas:
Eu assumi que
id
s devem ser únicos aqui.some
é uma ótima função para verificar a existência de coisas nas matrizes:fonte
some
faz retornar um boolean.found
serátrue
oufalse
dependendo se a condição no retorno de chamada é atendida.if (arr.some(function (el) { return el.Id == someId; })) { // do something }
. Não esqueça dissoreturn
ou você não receberá nada de volta.É bastante trivial verificar o nome de usuário existente:
Mas não é tão óbvio o que fazer quando você precisa adicionar um novo usuário a essa matriz. A saída mais fácil - basta pressionar um novo elemento com
id
igual aarray.length + 1
:Isso garantirá a exclusividade dos IDs, mas fará com que essa matriz pareça um pouco estranha se alguns elementos forem retirados do final.
fonte
Este pequeno trecho funciona para mim ..
fonte
.some
encontrado aqui - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Eu acho que, essa é a maneira mais curta de resolver esse problema. Aqui, usei a função de seta ES6 com .filter para verificar a existência da adição de um novo nome de usuário.
Link para Fiddle
fonte
Foi o que fiz além da resposta de @ sagar-gavhane
fonte
...
if(userExists) { const userId = userExists.id return userId; }
...
A resposta aceita também pode ser escrita da seguinte maneira, usando a função de seta em .some
fonte
Gosto da resposta de Andy, mas o ID não será necessariamente único, então aqui está o que eu criei para criar um ID exclusivo também. Também pode ser verificado no jsfiddle . Observe que
arr.length + 1
pode muito bem não garantir um ID exclusivo se algo tiver sido removido anteriormente.fonte
Você pode criar um protótipo do seu array para torná-lo mais modular, tente algo como isto
E você pode usá-lo como:
fonte
Eu tentei as etapas acima por algum motivo, parece que não está funcionando para mim, mas esta foi a minha solução final para o meu próprio problema, talvez útil para quem estiver lendo isso:
aqui post.likes é uma matriz de usuários que curtiram uma postagem.
fonte
tente isso
primeiro método usando alguns
segundo método usando include, map
fonte
Vamos supor que temos uma matriz de objetos e você deseja verificar se o valor do nome está definido assim,
fonte
Aqui está uma cadeia de métodos ES6 usando
.map()
e.includes()
:fonte
Às vezes, as funções nativas do array são 3 a 5 vezes mais lentas que os loops normais. Além disso, as funções nativas não funcionam em todos os navegadores, por isso há problemas de compatibilidade.
Meu código:
Dessa forma, você pode obter resultados mais rapidamente.
Nota: Eu não verifiquei se o parâmetro passado está vazio ou não; se você quiser, pode verificar ou escrever uma expressão regular para validação específica.
fonte
xorWith
no Lodash pode ser usado para conseguir issofonte
Confira aqui:
https://stackoverflow.com/a/53644664/1084987
Você pode criar algo como se a condição posteriormente, como
fonte
função number_present_or_not () {
var arr = [ 2,5,9,67,78,8,454,4,6,79,64,688 ] ;
var encontrada = 6; var found_two; para (i = 0; ifonte
A melhor prática é assim.
fonte