'Table Sort Based On a Value from the array saved in a stateArray

I was trying to do the sorting on Click of a button I tried all the methods based on sort()but I am unable to do so,below is the code snippet for the table values.

import React, { useEffect, useState } from 'react';
import html2canvas from "html2canvas";

export default function PointsTable() {
  const [teamName, setTeamName] = useState("");
  const [killPoints, setKillPoints] = useState();
  const [placePoints, setPlacePoints] = useState();
  const [chickenDinner, setChickenDinner] = useState();

  const [tableData, setTableData] = useState([]);

  const [tableValues, setTableValues] = useState([]);

  const handleChange = (e) => {
    //const name = e.target.name
    //const value = e.target.value
    const { name, value } = e.target;
    // console.log(value)

    if (name === "teamName") {
      setTeamName(value);
    } else if (name === "chickenDinner") {
      setChickenDinner(value);
    } else if (name === "killPoints") {
      setKillPoints(value);
    } else if (name === "placePoints") {
      setPlacePoints(value);
    }
  };

  const handleDownloadImage = async () => {
    const element = document.getElementById("print"),
      canvas = await html2canvas(element, {
        scale: 10
      }),
      data = canvas.toDataURL("image/jpg"),
      link = document.createElement("a");

    link.href = data;
    link.download = "downloaded-image.jpg";

    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  };

This is to add the input values to the array

  const addData = () => {
    let data = {
      teamName: teamName,
      killPoints: killPoints,
      placePoints: placePoints,
      chickenDinner: chickenDinner,
    };
    console.log(data);
    setTableData([...tableData, data]);
  };

below is the function for sorting based on a paticular value I don't know how to sort the array named as tableData ,on button click the items should be sorted and displayed in the table

 const sortByPriceDesc = () => {
    tableData.sort((a, b) => (b.killPoints - a.killPoints))
  }



return (
    <div className='col-lg-6 p-2 mx-auto' style={{ fontFamily: 'Unica One' }}>
      <div className='col-lg-3 text-center  mx-auto'>
        <input
          name="teamName"
          onChange={handleChange}
          className="p-2 mb-3 mr-1"
          placeholder="Team Name"
          value={teamName}
        // ref = {teamNameRef}
        />
        <input
          name="chickenDinner"
          onChange={handleChange}
          className="p-2 mb-3 mr-1"
          placeholder="Chicken Dinner"
          value={chickenDinner}
        // ref = {chickenDinnerRef}
        />
        <input
          name="placePoints"
          type='number'
          onChange={handleChange}
          className="p-2 mb-3 mr-1"
          placeholder="Place Points"
          value={placePoints}
        // ref = {placePointsRef}
        />
        <input
          name="killPoints"
          type='number'
          onChange={handleChange}
          className="p-2 mb-3 mr-1"
          placeholder="Kill Points"
          value={killPoints}
        // ref = {killPointsRef}
        />
        <button className="btn bg-warning text-dark fs-5 text fw-bold" onClick={addData}>
          Add Row
        </button>
      </div>
      <div className='bg-dark p-2 m-2'>
        <button className="btn bg-warning text-dark fs-5 text fw-bold" onClick={sortByPriceDesc} >
          Sortit
        </button>
      </div>
      <div id="print" className='bg-dark p-2 m-2'>
        <h3 className='text-light text-center'>
          200IQ
        </h3>
        <p className='text-light text-center'>
          SEASON 1
        </p>
        <div className='fw-bolder fs-5 text col-lg-12 text-center bg-warning text-dark'>
          <p>
            QUALIFIERS DAY 1 - GROUP A
          </p>
        </div>
        <div className='col-lg-12 row bg-dark border-warning border m-1'>
          <div className='fw-normal fs-6 text col-lg-1 text-center  text-light bg-warning text-dark'>S.No</div> <br></br>
          <div className='fw-normal fs-6 text col-lg-3 text-light  text-center'>TEAM NAME</div>
          <div className='fw-normal fs-6 text col-lg-3 text-light  text-center'>CHICKEN DINNER</div>
          <div className='fw-normal fs-6 text col-lg-2 text-light text-center'>PLACE POINTS</div>
          <div className='fw-normal fs-6 text col-lg-2 text-light text-center'>KILL POINTS</div>
          <div className='fw-normal fs-6 text col-lg-1 text-light text-center text-light'>TOTAL</div>
        </div>
        {tableData.map((item, idx) => {
          return (
            <div key={idx} className='col-lg-12 row bg-dark border-warning border m-1'>
              <div className='fw-normal fs-4 text col-lg-1 text-center  text-light bg-warning text-dark'>{idx + 1}</div> <br></br>
              <div className='fw-normal fs-4 text col-lg-3 text-light  text-center'>{item.teamName}</div> <br></br>
              <div className='fw-normal fs-4 text col-lg-3 text-light  text-center'>{item.chickenDinner}</div> <br></br>
              <div className='fw-normal fs-4 text col-lg-2 text-light text-center'>{item.placePoints}</div> <br></br>
              <div className='fw-normal fs-4 text col-lg-2 text-light text-center'>{item.killPoints}</div> <br></br>
              <div className='fw-normal fs-4 text col-lg-1 text-light text-center bg-warning text-dark'>{Number(item.placePoints) + Number(item.killPoints)}</div> <br></br>
            </div>
          );
        })}

      </div>
      <div className='text-center'>
        <button type="button" className='btn bg-warning text-dark fs-5 text fw-bold' onClick={handleDownloadImage}>download</button>
      </div>
    </div>
  );
}

please help me to solve the issue .Thanks in Advance..



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source