Nesne dizisini değere göre sıralamak için Lodash kullanın


106

Bir diziyi 'ad' değerine göre (Lodash kullanarak) sıralamaya çalışıyorum. Lodash belgelerini aşağıdaki çözümü oluşturmak için kullandım ancak .orderBy'nin hiçbir etkisi yok gibi görünüyor. Biri diziyi doğru bir şekilde sıralamak için biraz ışık tutabilir mi?

Karakter Dizisi

[  
   {  
      "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"
   }
]

Fonksiyon Kodu

 var chars = this.state.characters;

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

 this.setState({characters: chars})

Yanıtlar:


213

Bu yöntem orderBygirdi dizisini değiştirmez, sonucu dizinize atamanız gerekir:

var chars = this.state.characters;

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

 this.setState({characters: chars})

hmmm, diziyi hala sıralayacak gibi görünmüyor. Soruyu güncellemem mi yoksa

1
Cevap Güncelleme, belki hata nedeniyle bir dizinin yerine iki parametre geçen etmektir'name', 'asc'
Artemis Young

1
" orderBygirdi dizisini değiştirmez" ... " orderBydiziyi yerinde değiştirir." Amaçlanan ifade muhtemelen "yerinde değil" veya "yerinde değil" dir. Bakınız: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

Aslında haklısın, cevaba hiçbir şey eklemediği için bu cümleyi kaldırdım
Artémis Young

Yani ikinci parametre ['asc'], yolu eklemek olacağını değil düzen Artan elde etmek vermez reverse()sonra orderBy(sürümünde 4.17.15 en azından)
Diego Ortiz

65

Lodash sortBy'yi ( https://lodash.com/docs/4.17.4#sortBy ) kullanabilirsiniz.

Kodunuz şöyle olabilir:

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)

33
Ayrıca kısaltmayı da kullanabilirsiniz:_.sortBy(myArray, 'name')
Don

9
İle karşılaştırıldığında orderBy, sıralama türünü içeri aktaramazsınız sortBy, her zaman artan düzende sıralar.
a_rahmanshah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.