为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2022-08-18 16:00:36
我正在学习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
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

您的问题是,当您计算提示时,您正在修改 的元素。发生这种情况是因为数组在 JavaScript 中是通过引用传递的,这意味着这不是包含 的所有元素的新数组,而是相同的数组。因此,当您将其称为 时,您对它所做的任何修改都会显示出来。myBillsArrayarrayOfBillsmyBillsArraymyBillsArray


要解决此问题,您可以执行以下操作:


function calculateTips(arrayOfBills){

  var myTips = [];

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

    if(arrayOfBills[i] < 50){

      myTips[i] = arrayOfBills[i] * 0.20;

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

      myTips[i] = arrayOfBills[i] * 0.15;

    }else{

      myTips[i] = arrayOfBills[i] * 0.10;

    }

  }

  return myTips;

}


查看完整回答
反对 回复 2022-08-18
?
Qyouu

TA贡献1786条经验 获得超11个赞

您可以将计算提示函数更改为以下内容。使用新数组保留函数的结果


function calculateTips(arrayOfBills){

    var tips = []


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

    if(arrayOfBills[i] < 50){

      tips[i] = arrayOfBills[i] * 0.20;

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

      tips[i] = arrayOfBills[i] * 0.15;

    }else{

      tips[i] = arrayOfBills[i] * 0.10;

    }

  }

  return tips;

}


查看完整回答
反对 回复 2022-08-18
  • 2 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号