Search code examples
reactjsarraylisthtml-tablemerntablerow

How to multiply Array of object Based on Quantity To Create new Rows?


How can i Multiply array object inside 'AddNewRow' function so i can create new rows based on quantity, if user insert '3' in quantity column and click on 'add' Button then '3' rows should be created.

How can i do This Please help me.

This Is My AddNewRow Function

/*For Handling addrow button event */
  const addNewRow = () => {
    try {
      if (
        GetLastProdId === "" ||
        GetLastPrice === "" ||
        GetLastProdSrno === "" ||
        GetLastProd_Status === "ProDataWarranty" && GetLastProDataWarrentyInPrcnt === "NULL"
      ) {
        console.log("empty fields!!!!!");
        setFill(true);
      } else if (GetLastProdSrno === GetSecondLastProd_Srno) {
        setProdSrnoSame(true);
        console.log("Prod SrNo same!!!");
      } else {
        setProdSrnoSame(false);

        setProduct_Details((prevState) => [
          ...prevState,

//** Want This Object get multiplied By Clicking.
         {
            index: Math.random(),
            billId: BillIdFetch,
            prodId: "",
            price: "",
            prod_SrNo: "",
            discount: "0",
            Qty:"1",
            Prod_Status: "NULL",
            proData_warranty_In_Prcnt: "NULL",
            Credit_Note: "NULL",
            Replacement: "NULL",
          },
        ]);
      }
    } catch (error) {
      console.log(error);
    }
  };

Solution

  • You could create an array an add as many object copies to it as you want:

    /*For Handling addrow button event */
    const addNewRow = () => {
      try {
        if (
          GetLastProdId === '' ||
          GetLastPrice === '' ||
          GetLastProdSrno === '' ||
          (GetLastProd_Status === 'ProDataWarranty' &&
            GetLastProDataWarrentyInPrcnt === 'NULL')
        ) {
          console.log('empty fields!!!!!');
          setFill(true);
        } else if (GetLastProdSrno === GetSecondLastProd_Srno) {
          setProdSrnoSame(true);
          console.log('Prod SrNo same!!!');
        } else {
          setProdSrnoSame(false);
    
          // Object to be multiplied
          const obj = {
            billId: BillIdFetch,
            prodId: '',
            price: '',
            prod_SrNo: '',
            discount: '0',
            Qty: '1',
            Prod_Status: 'NULL',
            proData_warranty_In_Prcnt: 'NULL',
            Credit_Note: 'NULL',
            Replacement: 'NULL',
          };
    
          const addedObjs = [];
    
          // Add as many `obj` as the quantity inserted by the user
          for (let i = 0; i < multiplier; i++) addedObjs.push({ ...obj, index: Math.random(), });
    
          setProduct_Details((prevState) => [
            ...prevState,
            ...addedObjs
          ]);
        }
      } catch (error) {
        console.log(error);
      }
    };