在数组上分配nr

时间:2019-02-05 21:43:53

标签: javascript arrays

我有一个数字数组:

var arr = [4.49, 4.03, 3.47, 3.05, 2.98, 2.94]

我想通过以连续顺序添加到数组中的数字来为数组分配2.89。同时,需要确保所有数字都不会超过4.9。 所需的输出应为以下数组:

var arr2 = [4.9, 4.9, 4,9, 3.65, 3.05, 2.98, 2.94];

任何人都对相应的JS代码有同样的想法来转换数组的想法。

1 个答案:

答案 0 :(得分:0)

您可以检查数字加上要分配的总和是否大于最大值,然后返回调整后的值或带有剩余总和的要分配的值。

                                            sum
------  ----  ----  ----  ----  ----  ----  ----
source  4.49  4.03  3.47  3.05  2.98  2.94
 delta  0.41  0.87  1.43  0.18  0.00  0.00  2.89
result  4.90  4.90  4.90  3.23  2.98  2.94

var array = [4.49, 4.03, 3.47, 3.05, 2.98, 2.94],
    max = 4.9,
    sum = 2.89,
    result = array.map(v =>
        (vs => (sum = vs > max && vs - max, Math.min(vs, max)))
        (v + sum)
    );
    
console.log(result);

更具可读性。

var array = [4.49, 4.03, 3.47, 3.05, 2.98, 2.94],
    max = 4.9,
    sum = 2.89,
    result = array.map(v => {
        var temp;
        if (v + sum > max) {
            sum -= max - v;
            return max;
        } else {
            temp = v + sum;
            sum = 0;
            return temp;
        }
    });
    
console.log(result);