Para quem não entendeu: A função indexOf() retorna o primeiro índice em que o elemento pode ser encontrado no array. ex: Temos o seguinte vetor " const vet = [2, 4, 5, 4] " e a validação " vet.indexOf( elem ) === i " ou seja para ele ficar no novo vetor o index do elemento deve ser o mesmo indice do vet. para o elemento 2: o indice dele é zero e o indexOf tbm é zero. para o elemento 4: o indice dele é 1 e o indexOf tbm é 1. para o elemento 5: o indice dele é 2 e o indexOf tbm é 2. para o elemento 4: o indice dele é 3 e o indexOf é 1. com isso ele sai do array, pq ele nao obedeceu a validação. o novo array = [2, 4, 5]
Opa, obrigado pela aula! Não consegui captar bem a lógica do algoritmo com a nova sintaxe do js. Ainda não estou com prática nela e fiquei meio perdido na explicação.
É a sintaxe moderna para algo que seria mais ou menos assim: function unique( elem, index, arr ) { return arr.indexOf( elem ) === index } Aí o filter() vai passar cada elemento do array e fazer esse teste, fazendo sobrar só os que deram true. Dá uma olhada no artigo escrito (tem na desc o link) que lá explica com mais detalhes. Vlwww
@@deividd.9497 Maravilha, então. Se é seu primeiro contato com a coisa, é normal não entender. Mas assista ao vídeo 200x, se for preciso, que você vai ver que não é tão complexo assim. :)
Video ótimo, deixou bem claro a função do filter(). eu só não entendi bem o indexOf() ali no meio. sei q ele mostra a posição. eu entendi q vc programou que. 'Se a posição desse array for igual a index "que tbm eh uma posição"'... não entendi pq ele não repetiu os numeros, eu achei q ele só iria percorrer. achei q teria que complementar mais, falando para o Java, olha não repete esses aqui. hahah não sei se fui clara. Mas se puder me esclarecer mais, ficarei grata.
@@CristinaSoile Ele vai testar a equivalência de índices no array, certo? Então, ele vai testando 1 por 1... Se ele encontra um número repetido, o índice vai ser diferente (ele vai considerar o duplicado que apareceu antes). Daí, não vai passar pela filtragem e o resultado vai ser números únicos no novo array. :)
Oi, Thiago. Nesse trecho, estamos testando se o índice do array original é o mesmo que o índice do elemento. developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
@@dpwoficial obrigado consegui entender com sua explicação. ele só retorna true se o indice do elemento buscado for o mesmo do elemento em questão, assim ele so pega a primeira ocorrência daquele elemento e se for exatamente igual incluindo o tipo
Neste caso, seria um processo de 2 etapas: 1. Encontrar os duplicados 2. Ver no array quais são diferentes dos encontrados ```js const items = [1, 2, 2, 4, 3, 4, 3] const duplicatedItems = items.filter((e, i, a) => a.indexOf(e) !== i) const uniqueItems = items.filter(x => !duplicatedItems.includes(x)) ```
Para quem não entendeu: A função indexOf() retorna o primeiro índice em que o elemento pode ser encontrado no array.
ex: Temos o seguinte vetor " const vet = [2, 4, 5, 4] " e a
validação " vet.indexOf( elem ) === i " ou seja para ele ficar no novo vetor o index do elemento deve ser o mesmo indice do vet.
para o elemento 2: o indice dele é zero e o indexOf tbm é zero.
para o elemento 4: o indice dele é 1 e o indexOf tbm é 1.
para o elemento 5: o indice dele é 2 e o indexOf tbm é 2.
para o elemento 4: o indice dele é 3 e o indexOf é 1. com isso ele sai do array, pq ele nao obedeceu a validação.
o novo array = [2, 4, 5]
Obrigado por complementar a explicação, Daniela. :)
EU TE AMO. OBRIGADO OBRIGADO OBRIGADO!!!!!!
Opa, obrigado pela aula!
Não consegui captar bem a lógica do algoritmo com a nova sintaxe do js. Ainda não estou com prática nela e fiquei meio perdido na explicação.
É a sintaxe moderna para algo que seria mais ou menos assim:
function unique( elem, index, arr ) {
return arr.indexOf( elem ) === index
}
Aí o filter() vai passar cada elemento do array e fazer esse teste, fazendo sobrar só os que deram true.
Dá uma olhada no artigo escrito (tem na desc o link) que lá explica com mais detalhes.
Vlwww
Obrigado amigo, essa função é bastante útil
Com certeza, Leandro. Quebra um galhão.
o que aconteceu aqui gente kkkkkkkkkkk, mdsssss buguei todo
Como assim? =P
@@dpwoficial Não consegui entender o exemplo, mas olhei os comentários aqui e teve um pessoal que fez exemplos simples que compreendi
@@deividd.9497 Maravilha, então.
Se é seu primeiro contato com a coisa, é normal não entender. Mas assista ao vídeo 200x, se for preciso, que você vai ver que não é tão complexo assim. :)
Real, eu também buguei kkk
e se fosse um array de nomes e numeros ? como filtraria só os nomes ? ou numeros ? ex:
const arr = ['nome1',6,7,9,'nome2',10,23,50,'nome3'];
De várias maneiras diferentes. Por exemplo, com isNaN().
Video ótimo, deixou bem claro a função do filter(). eu só não entendi bem o indexOf() ali no meio. sei q ele mostra a posição. eu entendi q vc programou que. 'Se a posição desse array for igual a index "que tbm eh uma posição"'... não entendi pq ele não repetiu os numeros, eu achei q ele só iria percorrer. achei q teria que complementar mais, falando para o Java, olha não repete esses aqui. hahah não sei se fui clara. Mas se puder me esclarecer mais, ficarei grata.
Cristina, não entendi bem.
Você mesma descreveu qual foi a lógica, rsrs... Qual é a dúvida?
@@dpwoficial oq fez ele não repetir os números no array?
@@CristinaSoile Ele vai testar a equivalência de índices no array, certo?
Então, ele vai testando 1 por 1... Se ele encontra um número repetido, o índice vai ser diferente (ele vai considerar o duplicado que apareceu antes).
Daí, não vai passar pela filtragem e o resultado vai ser números únicos no novo array. :)
nao entendi o codigo de exemplo na parte do indexOf
Oi, Thiago.
Nesse trecho, estamos testando se o índice do array original é o mesmo que o índice do elemento.
developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
@@dpwoficial obrigado consegui entender com sua explicação. ele só retorna true se o indice do elemento buscado for o mesmo do elemento em questão, assim ele so pega a primeira ocorrência daquele elemento e se for exatamente igual incluindo o tipo
O que o povo fica confuso é com a função de callback, pra quem está iniciando fica complicado entender.
Tem que entender. Isso é o dia-a-dia de JS.
E se eu quisesse objetos duplicados?
Como assim?
@@dpwoficial exemplo, ter um array com objetos duplicados. Aí através do filter, eu teria que criar um novo array, só que sem os objetos duplicados
@@yannlima6201 Veja se é o mesmo caso da resposta que dei para o Fabiano Queiroz Monte aqui nos comentários.
@@dpwoficial é quase igual, o problema é que não é um array comum como no vídeo, mas sim de objetos
@@yannlima6201 Veja se isso ajuda: dev.to/marinamosti/removing-duplicates-in-an-array-of-objects-in-js-with-sets-3fep
E o contrário? Quero somente os unicos.
Neste caso, seria um processo de 2 etapas:
1. Encontrar os duplicados
2. Ver no array quais são diferentes dos encontrados
```js
const items = [1, 2, 2, 4, 3, 4, 3]
const duplicatedItems = items.filter((e, i, a) => a.indexOf(e) !== i)
const uniqueItems = items.filter(x => !duplicatedItems.includes(x))
```
Explica o bagui, véi. C tá só mostrando funcionar
Tá explicado sim, meu bom.
Só nao entendi muito bem como a função sabe quais sãos os elem, index e arr
Pela ordem dos parâmetros. Ela foi feita para isso. :)