【问题标题】:How to calculate the proper numbers without doing a switch?如何在不进行切换的情况下计算正确的数字?
【发布时间】:2013-07-18 12:38:28
【问题描述】:

我需要一种算法来根据数组长度计算偏移量。我已经手动获取了每个号码的号码,但如果可能的话,无需进行大小写/切换。

给定数组长度x,我需要想出一些计算方法:

20 if x == 5
25 if x == 4
35 if x == 3
50 if x == 2

我错过了什么吗?我必须在这里使用开关吗?

【问题讨论】:

  • 不确定您是否会找到它。这些数字似乎太随机了
  • 试试({ 5:20, 4:25, 3:35, 2:50 })[ x ]
  • 这里涉及的逻辑是什么?你说你“手动得到每个号码的号码”。你是怎么得出这些数字的?你还没告诉我们。
  • 这是使用chart.js 绘制一些条形图的偏移量。

标签: javascript algorithm


【解决方案1】:

随机猜测,但105 div x 怎么样?

或者round(20 / x) * 5

实际上,由于您只给出了四个案例,因此您可以使用很多不同的方法。但也许更重要的是 - 是否有任何模式可以让您的代码更有意义?

【讨论】:

  • round(20/x) * 5 在上下文中是有意义的。谢谢!
【解决方案2】:

首先让我们明确您的映射函数不是线性的,因为对于(线性)x,您的函数结果之间的间隔不同。

要找到非线性函数,您需要应用一些“更难”的函数interpolation(例如拉格朗日)。

对于输入[2, 50], [3, 35], [4, 25], [5, 20],我使用这个漂亮的online tool 得到的结果是(5x^2-55x+190) / 2

但老实说,对于这么少的值,我会使用 switch - 它可能更有效并且让您的代码易于理解(例如,如果您在一年左右查看它;-))。

希望对您有所帮助。

*约斯特

【讨论】:

  • @子瑶的方程式要简单得多。
  • @Shawn31313 我知道,但我指出了一个可以应用于四个以上值的解决方案。 (好的 - 你必须留意插值的错误。)
  • 我的回答只是一个例子......手动“回归”。这绝对是更科学的,但那太有趣了,不能发帖。 +1 仍然。
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 2016-07-09
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多