我有一个数字数组:
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代码有同样的想法来转换数组的想法。
答案 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);