gpt4 book ai didi

javascript - 调整数字数组

转载 作者:行者123 更新时间:2023-11-30 18:40:08 25 4
gpt4 key购买 nike

给定一组数字,调整一个数字并按比例分摊数组中其他某些项的差异的好方法是什么?

给出:

var array = [10,20,30,40,50]

-> 将第三项向上调整 30 并在第一项和最后一项之间按比例减去,这样项目的总和仍然是 150(数组中的第二个和第四个元素是固定的或应该保留一样)。

= 应该出来:[5,20,60,40,25]

(最好是 javascript,但如果需要的话,我可以从 C#/VB.net 翻译过来)

最佳答案

这是一个通用的 JS 函数,用于将调整平均分配给数组中的所有其他项目:

var array = [10,20,30,40,50];

function amortize(list, index, amount) {
if (list.length <= 1) return; // can't amortize with 0 or 1 items in list
var remaining = amount / (list.length - 1);
list[index] += amount;
for (var i = 0; i < list.length; i++) {
if (i != index) {
list[i] -= remaining;
}
}
}

如果你真的想要一个非通用的函数,它只调整两端并保持中间两边的那些不变,那么你可以这样做:

var array = [10,20,30,40,50];

function amortizeEnds(list, amount) {
var remaining = amount / 2;
list[0] -= remaining;
list[4] -= remaining;
list[2] += amount;
}

我不确定我是否理解您的比例请求,但这里有一个可以为您提供您所要求的结果:

var array = [10,20,30,40,50];

function amortizeEndsProportional(list, amount) {
var endsTotal = list[0] + list[4];
var reductionProportion = amount / endsTotal;
list[0] = list[0] - list[0] * reductionProportion;
list[4] -= list[4] - list[4] * reductionProportion;
list[2] += amount;
}

你可以在这里看到最后一个作品:http://jsfiddle.net/jfriend00/QayQp/ .

关于javascript - 调整数字数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com