【问题标题】:Javascript: proportionally "scale" array of numbers to sum to a valueJavascript:按比例“缩放”数字数组以求和一个值
【发布时间】:2019-06-24 01:12:19
【问题描述】:

我在 javascript 中有一个数字数组 - 例如:

[ 100, 100, 100, 100 ]

鉴于数组必须总和为一个值 - 我将使用 100 作为示例,我正在尝试创建一个函数,该函数将按比例放大或缩小此数据集,从而导致每个值等于 25 - 例如。如果我运行此函数,则从数组中删除其中一个值,从而生成如下数组:

[25,25,25]

该函数将为剩余的每个条目返回 33.3333- 的值,因此它的总和仍为 100。

此外,如果我将其中一个值迭代 1,则创建一个数组:

[33.33333,33.33333,34.33333]

总和为 101,该函数需要按比例减少其他未修改的条目,以使总和正好为 100,这意味着我需要能够根据它是数组中的索引。我正在寻找这样的东西:

function ProportionallyScale(array,mustsumto,exclude = false) { 
//do math 
return array;
}

【问题讨论】:

  • 最后一个数组的结果是什么?
  • 101 - 该示例与我需要减少未修改值以适应刚刚修改的值的迭代这一事实有关。所以 33.33 的两个实例都需要减少 0.5(并且 34.33 保持不变)才能得到总和 100。

标签: javascript arrays math


【解决方案1】:

你会如何处理这个问题:

  • 求数组中所有值的总和
  • 将每个值除以总和
  • 将每个值乘以 100

这显然是一个家庭作业问题,所以我不会为您编写代码,但是对于这些事情中的每一个,您都需要一个 for() 循环。祝你好运!

【讨论】:

  • 谢谢。它实际上与我在我的网站上构建的一个简单工具有关,当用户添加或删除一个或增加一个 +- 1% 时,它需要将一堆 div 重新缩放到一个总高度为 100% 的容器中.您的方法适用于所有情况,除非数组中的一个值增加,并且剩余的值需要增加/减少以总和为 100(关于从计算中排除值的部分)。我该如何处理那部分?
  • 只需使用 CSS 即可。这就是它的目的
  • 这一切都需要在用户输入动态创建的内容时发生——这就是我使用 JS 的原因。在 JS 中运行计算后,我使用 jQuery 用新的百分比更新 CSS。
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2021-02-27
  • 2016-09-27
相关资源
最近更新 更多