2017-12-20 15 views
1

ソート問題(私は、私はちょうどここに、基本的なES6をめちゃくちゃだと思うが、それを見ていないです):並べ替えオブジェクトの配列が機能していない

は、私は、プロットの配列を持っている状態から入ってくるオブジェクト(実際には、フィルタが適用されているかどうかによって2つの配列のうちの1つです)。各オブジェクトには、プロパティとしてGeoJSON機能があります。私はまた、州から来る地図センターのプロパティを持っています。 MapStateToPropsでは、マップの中心からプロットの距離を返します(これが適切に動作することが確認されています)。次に、プロット配列をコピーし、プロットを中心からの距離でソートし、新しい配列を返します。しかし、悲しいことに、新しい配列は適切にソートされていません(順序はありません)。

私は行方不明を誰かが見ていますか?

function mapStateToProps(state) { 
    const distancetoCenter = (shape, props) => { 
     if (shape.feature && props.mapCenter) { 
      const theDistance = distance(
       centroid(shape.feature).geometry.coordinates.reverse(), 
       point([props.mapCenter.lat, props.mapCenter.lng]), 
       { units: 'kilometers' } 
      ); 
      //console.log(`the distance to center of ${shape.name} is ${theDistance}`); 
      return theDistance; 
     } 
    }; 
    const sortPlots = props => { 
     if (props.filteredPlots || props.plots) { 
      return (props.filteredPlots || props.plots).slice(0).sort((a, b) => { 
       distancetoCenter(b, props) - distancetoCenter(a, props); 
      }); 
     } 
    }; 

    const sortedPlots = sortPlots(state.plots); 
    return { 
     mapCenter: state.plots.mapCenter, 
     sortedPlots 
    }; 
} 
+0

ちょうどstateではなくstate.plotsでsortPlotsを呼び出しています。 – brub

+0

@brubこれは、これらの配列がstate.plotsに存在するため、そうする必要があります。 –

答えて

2

.sortコールバックの中で、あなたが結果を返す必要があります。

distancetoCenter(b, props) - distancetoCenter(a, props);

は次のようになります。

return distancetoCenter(b, props) - distancetoCenter(a, props);

+1

素晴らしいです、ありがとうございました。 –

2

他のソリューションは、中括弧を省略することができarrow function次に、式の結果が返されます。

return (props.filteredPlots || props.plots).slice(0).sort((a, b) => 
    distancetoCenter(b, props) - distancetoCenter(a, props) 
); 
関連する問題