Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Fazendo sorting de objetos com React e Redux

Boa tarde, eu já fiz vários cursos de JavaScript além da Alura e continuo com dúvidas relacionadas a funções, retorno, quando retornar um objeto e como trabalhar com objetos. Tudo o que eu pesquisei não responde essa dúvida, eu pensei que conseguiria fazer um projeto React e não consegui por causa disso. Eu queria fazer um sort por categoria data, mas eu não sei como acessar a propriedade votescore, não sei se o problema está no JavaScript ou no React, porque eu estou usando Redux. Mas eu sei que eu tenho um retorno de [Object][Object] e pesquisando deveria funcionar com Object.keys ou values, mas eu não consigo fazer isso na função sort, não sei como retornar esses dados, fiz o projeto no codesandbox:

https://codesandbox.io/embed/727z08znnj?codemirror=1

4 respostas

Pela descrição do problema, parece algo relacionado ao Javascript. A função do Redux é para compartilhar o estado com diversos componentes (através de actions que vão buscar os dados nos reducers).

O retorno de [Object Object] pode estar sendo causado por alguma conversão que você esteja fazendo nos valores que você quer trabalhar. Aqui tem um exemplo de como reproduzir este problema:

https://stackoverflow.com/questions/34573792/javascript-function-to-return-object-returns-object-object

Aqui tem exemplos de como você fazer o filtro num array de objetos(usando sort). Tem exemplo de como filtrar por data e de como filtrar por outro tipo de campo:

https://stackoverflow.com/questions/10123953/sort-javascript-object-array-by-date

https://davidwalsh.name/array-sort

Obrigada, eu vou olhar. É um array de objetos, mas eu vou tentar entender como os dados estão sendo devolvidos. Vou ver os links.

Me ajudaram a criar a função de sort e vi outros exemplos na internet usando o react, mas ainda estou com dúvidas nos valores que estão sendo retornados, parece que a função não funciona.

https://codesandbox.io/s/kj4y334q3

solução

A solução foi mudar de > ou < para o sinal de -, não entendi porque. Com o sinal de - funcionou.

Se alguém precisar:

function orderPosts(posts, option) {
  switch (option) {
    case "score":
      return posts.sort((a, b) => a.voteScore - b.voteScore).map(p => p);
    case "date":
      return posts.sort((a, b) => a.timestamp - b.timestamp).map(p => p);
    default:
      return posts.map(p => p);
  }
}