DEV Community

Lessa Apolinario da Silva Neto
Lessa Apolinario da Silva Neto

Posted on

Métodos de Array em JavaScript

Neste artigo será abordado o uso de alguns métodos de array com Node.js e TypeScript. Os métodos usados são métodos que percorrem a lista a fim de transformar, filtrar ou realizar buscas, tudo isso sem modificar o modificar original. Para mostrar os exemplos serão usados métodos de uma classe que manipula um array de posts fictícios.

forEach

Este método executa uma função para cada elemento do array e retorna undefined. Esse método não modifica o array original.

O seguinte exemplo percorre a lista de posts e seus comentários:

printAllPosts() {
    this._posts.forEach((post) => {
      const postWithoutComments = {
        id: post.id,
        title: post.title,
        body: post.body,
        likes: post.likes,
      }

      console.log('<---------- Post ---------->')
      console.log(postWithoutComments)

      if (!!post.comments?.length) {
        console.log('<---------- Comments ---------->')

        post.comments?.forEach((comment) => {
          console.log(comment)
        })

        console.log('<---------- End comments ---------->')
      }

      console.log('<---------- End post ---------->\n\n')
    })
  }
Enter fullscreen mode Exit fullscreen mode

map

Este método executa uma função para transformar cada elemento do array e retorna a nova lista com as transformações. Esse método não modifica o array original.

O seguinte exemplo mostra como obter um array de objetos com a chave likes contendo o número de likes de cada post:

getPostsLikes() {
    return this._posts.map((post) => {
      return {
        likes: post.likes,
      }
    })
  }
Enter fullscreen mode Exit fullscreen mode

filter

Este método executa uma função para filtrar elementos de um array com base numa condição e retorna uma nova lista filtrada. Esse método não modifica o array original.

O seguinte exemplo filtra os posts que possuem likes, ou seja, o número de curtidas é positivo:

getPostsWithLikes() {
    return this._posts.filter((post) => {
      return post.likes > 0
    })
  }
Enter fullscreen mode Exit fullscreen mode

some

Este método faz uma verificação para cada elemento do array, se pelo menos um fizer ela ser verdadeira, a função retorna true. Esse método não modifica o array original.

O seguinte exemplo verifica se algum post tem title vazio, ou seja, não tem título definido.

verifyIfAnyPostHasEmptyTitle() {
    return this._posts.some((post) => {
      return !post.title?.length || typeof post.title === 'undefined'
    })
  }
Enter fullscreen mode Exit fullscreen mode

every

Este método verifica se todos os elementos do array satisfazem uma condição, se sim retorna true, senão retorna false. Esse método não modifica o array original.

O seguinte exemplo verifica se todos os posts não tem comentários.

verifyIfAllPostsHaveNoComments() {
    return this._posts.every((post) => {
      return post.comments?.length === 0
    })
  }
Enter fullscreen mode Exit fullscreen mode

find

Este método retorna um elemento com base numa condição de busca, se for encontrado retorna o elemento, senão retorna undefined. Esse método não modifica o array original.

O seguinte exemplo busca um post por id.

getPostByID(id: string) {
    if (!id.length) {
      return
    }

    return this._posts.find((post) => {
      return post.id === id
    })
  }
Enter fullscreen mode Exit fullscreen mode

findIndex

Este método retorna o índice do primeiro elemento encontrado dada uma condição, caso não encontre retorna -1. Esse método não modifica o array original.

O seguinte exemplo busca a posição do post por título.

const ELEMENT_NOT_FOUND_INDEX = -1

getPostIndexByTitle(title: string) {
    if (!title.length) {
      return ELEMENT_NOT_FOUND_INDEX
    }

    return this._posts.findIndex((post) => {
      return post.title?.toLowerCase() === title.toLowerCase()
    })
  }
Enter fullscreen mode Exit fullscreen mode

reduce

Reduz um array a um tipo de dado (number, string, object e etc), o reduce recebe como parâmetros o valor inicial e uma função que vai ser executada para cada elemento tendo o accumulator e currentValue como parâmetros, o accumulator tem como valor padrão o valor inicial definido na função e o currentValue é o elemento atual do array. Esse método não modifica o array original.

O seguinte exemplo conta os posts que não têm title definido.

getPostsWithoutTitleCounting() {
    return this._posts.reduce((accumulator, currentPost) => {
      if (!currentPost.title?.length) {
        return accumulator + 1
      }

      return accumulator
    }, 0)
  }
Enter fullscreen mode Exit fullscreen mode

Nota: Cuidado para não usar os métodos da forma errada, por exemplo, não use o map para percorrer listas, ele foi feito para transformações, nesse caso use o forEach.

Os outros exemplos estão nesse repositório: https://github.com/LessaApolinario/array-methods-javascript

Top comments (0)