Menyortir tanggal melempar pengecualian TypeError: data.createdAt.sort is not a function. Saya ingin mengurutkan dan menampilkan rekor terbaru terlebih dahulu di aplikasi reaksi saya.

{
                                displayWinner.map(data => (
                                <div key={data.id}className="oldwinner">
                                    <div className="winnerIcon">
                                        <img src="/images/trophy1.png"></img>
                                        <span key={data.winner} className="winner name">{data.winner}</span>
                                        <span key={data.createdAt} className="winner date">{moment(data.createdAt.sort((a, b) => b - a)).format('DD-MMM-YYYY')}</span>
                                    </div>
                                </div>
                                ))
                            }

enter image description here

enter image description here

https://codesandbox.io/s/zen-edison-l4shu?file=/src/styles.css.

1
soccerway 29 Mei 2021, 01:15

3 jawaban

Jawaban Terbaik

Anda perlu mengurutkan data lalu memetakannya, sort((a, b) => moment(b.createdAt) - moment(a.createdAt)). Ambil setiap elemen dan konversi properti createdAt ke objek DateTime MomentJs untuk perbandingan numerik

{displayWinner
  .sort((a, b) => moment(b.createdAt) - moment(a.createdAt))
  .map((data,) => (
    <div key={data.createdAt} className="oldwinner">
      <div className="winnerIcon">
        <img key="data" src="/images/trophy1.png"></img>
        <span key={data.winner} className="winner name">
          {data.winner}
        </span>
        <span key={data.createdAt} className="winner date">
          {moment(data.createdAt).format("DD-MMM-YYYY")}
        </span>
      </div>
    </div>
  ))}

Edit sorting-dates-throws-exception-typeerror-data-createdat-sort-is-not-a-function

enter image description here

1
Drew Reese 28 Mei 2021, 23:51

Setidaknya ada 2 kasus ketika Anda bisa mendapatkan TypeError: x.sort is not a function ini. Ketika Anda mencoba untuk menelepon sort pada string atau Object. Dalam kasus Anda, Anda harus menyortir nilai-nilai saat ini.

{
    displayWinner.sort((a, b) => b - a).map(data => (
        <div key={data.id} className="oldwinner">
            <div className="winnerIcon">
                <img src="/images/trophy1.png"></img>
                <span key={data.winner} className="winner name">{data.winner}</span>
                <span key={data.createdAt} className="winner date">
                    { moment(data.createdAt.format('DD-MMM-YYYY') }
                </span>
            </div>
        </div>
    ))
}
0
ulou 28 Mei 2021, 22:38

Penyortiran harus dilakukan sebelum memetakan nilai-nilai

{
  displayWinner.sort((a, b) => moment(b.createdAt).format('DD-MMM-YYYY') - moment(a.createdAt).format('DD-MMM-YYYY')).map(data => (
                                    <div key={data.id}className="oldwinner">
                                        <div className="winnerIcon">
                                            <img src="/images/trophy1.png"></img>
                                            <span key={data.winner} className="winner name">{data.winner}</span>
                                            <span key={data.createdAt} className="winner date">{moment(data.createdAt).format('DD-MMM-YYYY')}</span>
                                        </div>
                                    </div>
                                    ))
                                }
0
ssBarBee 28 Mei 2021, 22:24