0
votes

Comment faire fonctionner la fonction pour Forach () en utilisant JavaScript

J'aimerais savoir comment faire fonctionner la fonction pour Forach () à l'aide de JavaScript.

La fonction ci-dessous fonctionne bien, mais comme dans DOTRANSCALC CODE> et DOFUNDCALC code>, le Les calculs sont similaires, y a-t-il une autre façon de faire cela. p>

p>

var objFund = [{
  "sucess": "true",
  "id": "fund",
  "options": "others",
  "fee": 3,
  "tax": 0.3,
  "amount": 2000
}]

var objTrans = [{
  "sucess": "true",
  "id": "trans",
  "options": "service",
  "fee": 2,
  "tax": 0.4,
  "amount": 1000
}]


function doTransCalc(trans) {
  trans.forEach(e => {
    if (e.success) {
      e.rate = 2.0,
        e.netFee = e.fee + e.tax,
        e.amountwithfee = e.amount + e.netfee,
        e.total = e.amountwithfee * e.rate;
    }
  })
}

function doFundCalc(fund) {
  fund.forEach(e => {
    if (e.success) {
      e.rate = 4.0,
        e.addfee = 10,
        e.netFee = e.fee + e.tax,
        e.amountwithfee = e.amount + e.netfee,
        e.total = e.amountwithfee * e.rate;
    }
  })
}

doTransCalc(objTrans);
doFundCalc(objFund);

console.log(objTrans);
console.log(objFund);


1 commentaires

Passez toutes les différentes variables en tant que paramètres.


4 Réponses :


0
votes

Selon ma compréhension, je suppose que cela vous aidera:

function doCalc(type, arr) {
    arr.forEach(e => {
        if (e.success) {
            e.rate = type === 'fund' ? 4.0 : 2.0,
            if(type === 'fund')
                e.addfee = 10;
            e.netFee = e.fee + e.tax,
            e.amountwithfee = e.amount + e.netfee,
            e.total = e.amountwithfee * e.rate;
        }
    })
}

doTransCalc('trans', objTrans);
doFundCalc('fund', objFund);


1 commentaires

@AbinThaha merci de réponse, de nombreuses valeurs clés varient, mais les clés Netfee, montantwithfee, total sont celui similaire,



0
votes

Vous pouvez simplement appeler une fonction de l'intérieur de la fonction foreach code> avec les paramètres appropriés.

Il y avait aussi des problèmes avec votre code existant: p>

  • Vos booléens étaient du format "true" code> au lieu de true code> li>
  • Vous avez eu malpéré succès dans vos Jsons afin que vous récupériez une propriété non existante dans E.SUCCESS CODE> LI>
  • Vous avez eu des camélins mélangés et des noms minuscules complètes. LI> ul>

    Vérifiez les 3 extraits suivants: p>

    p>

    var objFund = [{
      "success": true,
      "id": "fund",
      "options": "others",
      "fee": 3,
      "tax": 0.3,
      "amount": 2000
    }];
    
    var objTrans = [{
      "success": true,
      "id": "trans",
      "options": "service",
      "fee": 2,
      "tax": 0.4,
      "amount": 1000
    }];
    
    
    function doTransCalc(trans) {
      trans.forEach(e => alterObject.call(e, 2));
      return trans;
    }
    
    function doFundCalc(fund) {
      fund.forEach(e => alterObject.call(e, 4, 10));
      return fund;
    }
    
    function alterObject(rate, fee) {
      if (this.success) {
        if (arguments.length > 2) this.addfee = fee;
        this.rate = rate;
        this.netFee = this.fee + this.tax;
        this.amountWithFee = this.amount + this.netFee;
        this.total = this.amountWithFee * this.rate;
      }
      return this;
    }
    
    console.log(doTransCalc(objTrans));
    console.log(doFundCalc(objFund));


0 commentaires

0
votes

Vous pouvez décomposer la logique foreach code> tel que si (e.success) code> dans une fonction distincte:

p>

var objFund = [{
  "sucess": "true",
  "id": "fund",
  "options": "others",
  "fee": 3,
  "tax": 0.3,
  "amount": 2000
}];

var objTrans = [{
  "sucess": "true",
  "id": "trans",
  "options": "service",
  "fee": 2,
  "tax": 0.4,
  "amount": 1000
}];

function doCalc(fn) {
  return function (data) {
    data.forEach(e => {
      if (e.success) {
        fn(e)
      }
    })
  }
}

const doTransCalc = doCalc(e => {
    e.rate = 2.0,
    e.netFee = e.fee + e.tax,
    e.amountwithfee = e.amount + e.netfee,
    e.total = e.amountwithfee * e.rate;
});

const doFundCalc = doCalc(e => {
    e.rate = 4.0,
    e.addfee = 10,
    e.netFee = e.fee + e.tax,
    e.amountwithfee = e.amount + e.netfee,
    e.total = e.amountwithfee * e.rate;
});

doTransCalc(objTrans);
doFundCalc(objFund);

console.log(objTrans);
console.log(objFund);


0 commentaires

0
votes

Vous pouvez le faire avec une seule fonction et appeler votre liste avec des fonctionnalités ES6.

p>

const fundList = [{
  "success": "true",
  "id": "fund",
  "options": "others",
  "fee": 3,
  "tax": 0.3,
  "amount": 2000
},
{
  "success": "true",
  "id": "fund",
  "options": "others",
  "fee": 3,
  "tax": 0.3,
  "amount": 2000
}]

const transList = [{
  "success": "true",
  "id": "trans",
  "options": "service",
  "fee": 2,
  "tax": 0.4,
  "amount": 1000
},
{
  "success": "true",
  "id": "trans",
  "options": "service",
  "fee": 2,
  "tax": 0.4,
  "amount": 1000
}]

function calc(e, rate, addFee) {
  const netFee = e.fee + e.tax;
  const amountwithfee = e.amount + netFee;
  return {
    rate: rate,
    addfee: addFee ? addFee : null,
    netFee,
    amountwithfee,
    total: amountwithfee * rate
  }
}
const newTransList = transList.filter(e => e.success === 'true').map(e => calc(e, 2));
console.log(newTransList);
const newFundList = fundList.filter(e => e.success === 'true').map(e => calc(e, 4, 10));
console.log(newFundList);


0 commentaires