2017-04-23 12 views
3

私はいくつかの情報を含むオブジェクトの配列を持っています。私はそれらを私が望む順番でレンダリングすることができず、私はそれにいくつかの助けが必要です。私はこのようにそれらをレンダリング:Reactでオブジェクトの配列をソートしてレンダリングします

this.state.data.map(
    (item, i) => <div key={i}> {item.matchID} {item.timeM} {item.description}</div> 
) 

はそのmap() -functionまたは私はマップを使用する前にそれらをソートする必要がありますにitem.timeMで昇順にそれらをソートすることが可能ですか?

+3

などのカスタムコンパイラ定義を使用してsort()関数で簡単に行うことができます。 'map'メソッドを使用する前にソートする必要があります。 – Oen44

+1

@ Oen44が正しいです。しかし、ロジックと関数(マップとソート)はリアクション固有ではなく、通常のJS構造です! – gonzofish

答えて

17

これは、あなたが探しているものかもしれません:

// ... rest of code 

// copy your state.data to a new array and sort it by itemM in ascending order 
// and then map 
const myData = [].concat(this.state.data) 
    .sort((a, b) => a.itemM > b.itemM) 
    .map((item, i) => 
     <div key={i}> {item.matchID} {item.timeM}{item.description}</div> 
    ); 

// render your data here... 

方法sortwill mutate the original array。したがって、concatメソッドを使用して新しい配列を作成します。

+1

reactのkeyプロパティに配列のインデックスを使用しないでください。それは反パターンです。 – mradziwon

2

オブジェクトをマッピングする前にオブジェクトをソートする必要があります。

var obj = [...this.state.data]; 
obj.sort((a,b) => a.timeM - b.timeM); 
obj.map((item, i) => (<div key={i}> {item.matchID} 
         {item.timeM} {item.description}</div>)) 
関連する問題