use Lodash para ordenar la matriz de objetos por valor


97

Estoy tratando de ordenar una matriz por valor de 'nombre' (usando Lodash). Utilicé los documentos de Lodash para crear la solución a continuación, sin embargo .orderBy no parece tener ningún efecto en absoluto. ¿Alguien puede arrojar algo de luz sobre la forma correcta de ordenar la matriz?

Matriz de caracteres

[  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

Código de función

 var chars = this.state.characters;

 _.orderBy(chars, 'name', 'asc'); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})

Respuestas:


191

Este método orderByno cambia la matriz de entrada, debe asignar el resultado a su matriz:

var chars = this.state.characters;

chars = _.orderBy(chars, ['name'],['asc']); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})

hmmm, todavía no parece ordenar la matriz. No estoy seguro de si debería actualizar la pregunta o hacer una nueva

1
Se actualizó la respuesta, tal vez su error se deba a pasar dos parámetros en lugar de una matriz para'name', 'asc'
Artémis Young

1
" orderByno cambia la matriz de entrada" ... " orderBycambia la matriz en su lugar". La redacción prevista es probablemente "fuera de lugar" o "fuera de lugar". Ver: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

En realidad, tiene razón, acabo de eliminar esta oración ya que no agrega nada a la respuesta
Artémis Young

Ese segundo parámetro ['asc']no ordena ascendente, para lograr eso la forma sería agregar un reverse()después del orderBy(al menos en la versión 4.17.15)
Diego Ortiz

60

Puede usar lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ).

Tu código podría ser como:

const myArray = [  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

const myOrderedArray = _.sortBy(myArray, o => o.name)

32
También puede utilizar la taquigrafía:_.sortBy(myArray, 'name')
Don

7
En comparación con orderBy, no se puede pasar el tipo de clasificación sortBy, siempre se clasifica en orden ascendente.
a_rahmanshah
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.