简体   繁体   中英

Javascript custom sort

I've implement this sort:

<tbody>
  {results.sort((a, b) => a.status > b.status ? 1 : -1).map(el => {
    return (
    <tr>
      <td>{el.id}</td>
      <td>{el.amount}</td>
      <td>{el.time}</td>
      <td>{el.status}</td>
     
    </tr> 
    );
  })}
  </tbody>

So now I have them sorted by status as follows: active, updated, waiting. The problem is that I want them sorted by active, waiting, updated. How can I achieve this?

This is my array of objects:

 const data = [
        {
          id: 1,
          title: "Order 1",
          amount: 3,
          status: "active"
        },
        {
          id: 2,
          title: "Order 2",
          amount: 5,
          status: "waiting"
        },
        {
          id: 3,
          title: "Order 3",
          amount: 4,
          status: "updated"
        },
        {
          id: 4,
          title: "Order 4",
          amount: 3,
          status: "active"
        }
      ];

You can use indexOf to an ordered array, with this approach:

 const data = [{ id: 1, title: "Order 1", amount: 3, status: "active" }, { id: 2, title: "Order 2", amount: 5, status: "waiting" }, { id: 3, title: "Order 3", amount: 4, status: "updated" }, { id: 4, title: "Order 4", amount: 3, status: "active" } ]; const statusOrdered = ['active', 'waiting', 'updated'] data.sort((a, b) => statusOrdered.indexOf(a.status) - statusOrdered.indexOf(b.status)); console.log(data)

Try something like this for your sorting function.

(a,b) => {
    let ranking = {
        active:1,
        waiting:2,
        updated:3,
    }
    return ranking[a.status] - ranking[b.status]
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM