当前位置: 代码迷 >> JavaScript >> 在给定的订单大小下,可以从数组中取出多少个物品
  详细解决方案

在给定的订单大小下,可以从数组中取出多少个物品

热度:7   发布时间:2023-06-05 15:57:27.0

我有一个数组,其中包含数字,数组的顺序是固定的。

我想看看我的订单大小可以从这个数组中取出多少个项目

我的代码给出了错误的结果,例如500个单位可以购买第2个项目,第3个项目为0.66,所以总共可以购买2,66个,但是代码给出了4。对于250个单位,我可以将第一个项目全部购买,而第二个为0.75项目总数为1,75,但代码为1.5。

对于300给出2,这是正确的,但通常给出错误的结果。

我已经更改了for的内部或外部的结果行,如果条件会影响结果,但结果又是错误的(对于给定的数组2100单位,ordersize将使用所有6个结果的项目)

 function calculateOrder() { var coinArray = [100, 200, 300, 400, 500, 600]; var orderSize = 500; var sum = 0; var i = 0; for (i = 0; i < coinArray.length - 1; i++) { if (sum < orderSize) { sum += coinArray[i]; } return i + (orderSize - sum) / coinArray[i]; } } document.write(calculateOrder()); 

您的代码有三个问题:

  • for循环执行if语句,然后执行return语句,因此它始终在第一次迭代中返回
  • for循环需要迭代,直到i < coinArray.length
  • 所编写的循环迭代一次 ,以使return语句中的值正确。

这是纠正这些问题的版本:

 function calculateOrder() { var coinArray = [100, 200, 300, 400, 500, 600]; var orderSize = 500; var sum = 0; var i = 0; for (i = 0; i < coinArray.length; i++) { if (sum + coinArray[i] > orderSize) { // if orderSize is exceeded return i + ((orderSize - sum) / coinArray[i]); // 2 + (0.66) } sum += coinArray[i]; // else add to sum } } document.write(calculateOrder()); 

使用下面的代码。 我为您整理了一些东西。

  1. 创建一个变量来存储您当前拥有的金额 因此,每当您“购买”一件商品时,您都会减去所购买的商品。
  2. 我改变了一些逻辑使其工作。 基本上,return语句将您的当前金额除以所需金额,以获取您可以购买的部分商品,然后dds已购买的商品数量
  3. 另外,您还需要在其他位置放置其他内容。 如果if语句结果为false ,则执行else,因此,如果您没有足够的钱购买该物品,则执行else。
  4. return 中断了您的函数,因此这就是您之前的代码无法正常工作的原因之一。 for循环将执行一次 ,然后中断。
  5. for循环必须以coinArray.length 你可能以为你所需要的- 1存在,因为数组索引的从0开始,但由于for循环不足和不小于或等于将最后索引处结束。

 function calculateOrder(orderSize) { var coinArray = [100, 200, 300, 400, 500, 600]; var amountOfMoney = orderSize; for (var i = 0; i < coinArray.length; i++) { if (amountOfMoney > coinArray[i]) { amountOfMoney -= coinArray[i]; } else { return i + amountOfMoney / coinArray[i]; } } } document.write(calculateOrder(500)); 

  相关解决方案