Lodashを使用して、オブジェクトの配列を値でソートします


97

(Lodashを使用して)「名前」の値で配列をソートしようとしています。Lodashドキュメントを使用して以下のソリューションを作成しましたが、.orderByはまったく影響を与えていないようです。誰かが配列をソートする正しい方法にいくつかの光を当てることができますか?

文字配列

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

機能コード

 var chars = this.state.characters;

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

 this.setState({characters: chars})

回答:


191

このメソッドorderByは入力配列を変更しません。結果を配列に割り当てる必要があります:

var chars = this.state.characters;

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

 this.setState({characters: chars})

うーん、まだ配列をソートしていないようです。質問を更新する必要があるか、新しい質問を作成する必要があるか不明

1
答えは更新され、多分あなたのエラーが原因のため、アレイの代わりに、2つのパラメータを渡すにある'name', 'asc'
アルテミス・ヤング

1
" orderBy入力配列は変更されません" ... " orderBy配列が変更されます。" 意図された表現は、おそらく「非定位置」または「定位置外」です。参照:en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

それが答えに何も添加していないので、実際にあなたが正しい、私はこの文を削除している
アルテミス・ヤング

その2番目のパラメーター['asc']は昇順ではなく、reverse()後にorderBy(少なくともバージョン4.17.15で)を追加する方法を実現するには
Diego Ortiz

60

lodash sortBy(https://lodash.com/docs/4.17.4#sortBy)を使用できます。

あなたのコードは次のようになります:

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
:あなたはまた、速記使用することができます_.sortBy(myArray, 'name')
ドン・

7
と比較してorderBy、並べ替えのタイプをに渡すことはできませんsortBy。常に昇順で並べ替えられます。
a_rahmanshah
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.