'How to extract the logic part from map function to other self created functions. Keeping the map() logic into separate part

"As in this i have to separate logic from map() and put it into a function and then call it"

<tbody>
      {studentDatas.map((data) => {
        if (
          data.hindi < 35 ||
          data.english < 35 ||
          data.math < 35 ||
          data.science < 35
        ) {
          return (
            <tr key={data.id}>
              <td>{data.id}</td>
              <td>{data.name}</td>
              <td>{data.hindi}</td>
              <td>{data.english}</td>
              <td>{data.math}</td>
              <td>{data.science}</td>
              <td>Need to study more</td>
              <td>Fail</td>
            </tr>
          );
        }
        if (data.hindi + data.english + data.math + data.science < 250) {
          return (
            <tr key={data.id}>
              <td>{data.id}</td>
              <td>{data.name}</td>
              <td>{data.hindi}</td>
              <td>{data.english}</td>
              <td>{data.math}</td>
              <td>{data.science}</td>
              <td>Need to work hard</td>
              <td>Pass</td>
            </tr>
          );
        }
        if (data.hindi + data.english + data.math + data.science < 300) {
          return (
            <tr key={data.id}>
              <td>{data.id}</td>
              <td>{data.name}</td>
              <td>{data.hindi}</td>
              <td>{data.english}</td>
              <td>{data.math}</td>
              <td>{data.science}</td>
              <td>Good</td>
              <td>Pass</td>
            </tr>
          );
        }
        if (data.hindi + data.english + data.math + data.science <= 400) {
          return (
            <tr key={data.id}>
              <td>{data.id}</td>
              <td>{data.name}</td>
              <td>{data.hindi}</td>
              <td>{data.english}</td>
              <td>{data.math}</td>
              <td>{data.science}</td>
              <td>Excellent</td>
              <td>Pass</td>
            </tr>
          );
        }
      })}
    </tbody>

"JSON DATA" export const studentDatas = [ { id: 1, name: "Student1", hindi: 10, english: 10, math: 20, science: 25, }, { id: 2, name: "Student2", hindi: 40, english: 80, math: 0, science: 0, }, { id: 3, name: "Student3", hindi: 70, english: 80, math: 80, science: 90, }, { id: 4, name: "Student4", hindi: 20, english: 45, math: 50, science: 70, }, { id: 5, name: "Student5", hindi: 40, english: 50, math: 70, science: 90, }, { id: 6, name: "Student6", hindi: 28, english: 70, math: 80, science: 10, }, { id: 7, name: "Student7", hindi: 16, english: 50, math: 50, science: 10, }, { id: 8, name: "Student8", hindi: 78, english: 50, math: 50, science: 50, }, { id: 9, name: "Student9", hindi: 100, english: 100, math: 100, science: 100, }, ];



Solution 1:[1]

try this

   const getTotalMarks = (data) => {
    return data.hindi + data.english + data.math + data.science;
  }

and in map loop

<tbody>
    {studentDatas.map((data) => {
      const isFail = data.hindi < 35 || data.english < 35 || data.math < 35 || data.science < 35;
      const total = !isFail && getTotalMarks(data);
      return (
        <tr key={data.id}>
          <td>{data.id}</td>
          <td>{data.name}</td>
          <td>{data.hindi}</td>
          <td>{data.english}</td>
          <td>{data.math}</td>
          <td>{data.science}</td>
          {
            isFail ?
              <>
                <td>Need to study more</td>
                <td>Fail</td>
              </>
              : <>
                {
                  total < 250 ? <td>Need to study more</td>
                    : total < 300 ? <td>Good</td> : <td>Excellent</td>
                }
                <td>Fail</td>
              </>
          }
        </tr>
      );
    })}
  </tbody>

Sources

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

Source: Stack Overflow

Solution Source
Solution 1 Avani Bataviya