如何在JavaScript中对数字进行分组

How to group numbers in JavaScript

本文关键字:数字 JavaScript      更新时间:2023-09-26

所以我试图创建一些逻辑,根据设备数量计算订阅方案。这个东西的定价有点奇怪,我遇到了麻烦,所以让我试着解释一下。

定价模型是这样的

1,2个设备每个15美元(3,4,5(是10美元(对于整个组(+最初的前两个设备,然后这种模式无限期重复。因此,让我进一步说明1,2(3,4,5(6,7(8,9,10(这总共是80美元,我们有4个设备要收费,每个15美元,然后有2组,每个10美元,但这也适用于如果是1,2、4、5(6、7(8、9(,这仍然是80美元的,因为组从第一个数字开始,所以1、2(3(会变成40美元。所以我的问题是我不知道如何做到这一点。这是我的代码,到目前为止,任何帮助或指导都将不胜感激。我也有一种感觉,我从一个完全错误的角度来看待这个问题。

JavaScript

var numberOfDevices = 19,
    numberOfEach = 8,   //Awesome imaginary code that would calculate the value from numberOfDevices
    numberOfGroups = 4, //Awesome imaginary code that would calculate the value from numberOfDevices
    priceOfEach = 15,
    priceOfGroup = 10,
    addUpEach = numberOfEach * priceOfEach,
    addUpGroup = numberOfGroups * priceOfGroup,
    addUpAll = addUpEach + addUpGroup;
    alert(addUpAll);

让我们将五个集合称为一个包,因为我们必须对其进行调用。包裹很容易计数,我们只需对设备数量进行整数除法:

var packages = Math.floor(19 / 5);

计算packages包数的总数很简单:

var total = packages * (15 + 15 + 10); // or var total = packages * 40 

现在,我们使用余数运算符获取剩余值

var leftovers = 19 % 5;

应用问题中所述的规则,零设备零美元,前两个各15美元,包40美元:

if(leftovers <= 2) { 
  total += leftovers * 15;
} else { // otherwise count it as a package.
  total += 40;
}

将所有这些封装在可读的双线解决方案中:

function calc(num) {
  var leftovers = num % 5;
  return (leftovers <= 2 ? leftovers * 15 : 40) + Math.floor(num / 5) * 40;
}

一个无法阅读但有效的解决方案:

function c(n){return n%5<=2?n%5*15:40+Math.floor(n/5)*40;}