Search code examples
javascriptarraysreactjssortingreact-typescript

How can I show the latest data by date using sort in react typescript


My date format is like this: Mon Mar 07 2022 and I want to show the latest data. I have tried this way but it's not working.

If I put new Date() into my code I got this error: var Date: DateConstructor new (value: string | number | Date) => Date (+3 overloads) The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.

 useEffect(() => {
        setIsLoading(true)
        fetch(`http://localhost:5000/dashboard/orders`)
            .then(res => res.json())
            .then(data => {
                const latestData = data.sort((a, b) => b.date - a.date)
// const latestData = data.sort((a, b) => new Date(b.date) -new Date( a.date)) // error
                setOrders(latestData)
            })
            .finally(() => setIsLoading(false))
    }, [])

Solution

  • This is a typescript error, the sort comparator function accepts only numbers.

    Note: Without getTime it works in javascript.

    const data = [{
        date: "Mon Mar 07 2022",
      },
      {
        date: "Mon Mar 01 2022",
      },
      {
        date: "Mon Mar 06 2022",
      },
    ];
    const latestData = data.sort(
      (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()
    );
    console.log(latestData);