在函数中使用后保留参数的值

我正在学习Javascript,我正在做一个小程序,根据你的账单金额和你必须支付的总金额(账单+小费)计算服务员小费。这将返回 2 个数组,第一个数组包含按账单支付的提示,第二个数组包含要支付的总计。


代码如下:


var myBillsArray = [];

var numberOfBills = parseInt(prompt('Please enter the number of bills.'));

for(i=0; i<numberOfBills; i++){

  myBillsArray[i] = parseInt(prompt(`Insert your bill number ${i+1}`));

}

holidayBills(myBillsArray);


function holidayBills(billsArrays){

  var tipsArray =  [];

  var finalBillArray = [];  


  tipsArray = calculateTips(billsArrays);

  finalBillArray = calculateFinalBill(myBillsArray, tipsArray);


  console.log(tipsArray);

  console.log(finalBillArray);

}


function calculateTips(arrayOfBills){

  for(i=0; i<arrayOfBills.length; i++){

    if(arrayOfBills[i] < 50){

      arrayOfBills[i] *= 0.20;

    }else if(arrayOfBills[i] >= 50 && arrayOfBills[i] < 200){

      arrayOfBills[i] *= 0.15;

    }else{

      arrayOfBills[i] *= 0.10;

    }

  }

  return arrayOfBills;

}

function calculateFinalBill(arrayOfBills, arrayOfTips){

  var finalBill = [];

  for(i=0; i<arrayOfBills.length; i++){

    finalBill[i] = arrayOfBills[i] + arrayOfTips[i];

  }

  return finalBill;

}


但我遇到的唯一问题是,当我添加账单+小费时,账单值与小费值相同。我认为这是一个范围问题,但我不知道在哪里。


如果你想知道为什么我使用而不是它,那是因为练习要求我这样做。varlet


至尊宝的传说
浏览 125回答 2
2回答

BIG阳

您的问题是,当您计算提示时,您正在修改 的元素。发生这种情况是因为数组在 JavaScript 中是通过引用传递的,这意味着这不是包含 的所有元素的新数组,而是相同的数组。因此,当您将其称为 时,您对它所做的任何修改都会显示出来。myBillsArrayarrayOfBillsmyBillsArraymyBillsArray要解决此问题,您可以执行以下操作:function calculateTips(arrayOfBills){&nbsp; var myTips = [];&nbsp; for(i=0; i<arrayOfBills.length; i++){&nbsp; &nbsp; if(arrayOfBills[i] < 50){&nbsp; &nbsp; &nbsp; myTips[i] = arrayOfBills[i] * 0.20;&nbsp; &nbsp; }else if(arrayOfBills[i] >= 50 && arrayOfBills[i] < 200){&nbsp; &nbsp; &nbsp; myTips[i] = arrayOfBills[i] * 0.15;&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; myTips[i] = arrayOfBills[i] * 0.10;&nbsp; &nbsp; }&nbsp; }&nbsp; return myTips;}

Qyouu

您可以将计算提示函数更改为以下内容。使用新数组保留函数的结果function calculateTips(arrayOfBills){&nbsp; &nbsp; var tips = []&nbsp; for(i=0; i<arrayOfBills.length; i++){&nbsp; &nbsp; if(arrayOfBills[i] < 50){&nbsp; &nbsp; &nbsp; tips[i] = arrayOfBills[i] * 0.20;&nbsp; &nbsp; }else if(arrayOfBills[i] >= 50 && arrayOfBills[i] < 200){&nbsp; &nbsp; &nbsp; tips[i] = arrayOfBills[i] * 0.15;&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; tips[i] = arrayOfBills[i] * 0.10;&nbsp; &nbsp; }&nbsp; }&nbsp; return tips;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript