javascript - While 循环增加数字直到高于或等于目标

标签 javascript jquery loops

本质上,我想要做的是在我的代码中添加一个 while 循环,将分数加一,直到达到目标,我发现使用基本的 while 循环可以很容易地完成这一目标。然而,在我的版本中,它会略有不同,正如您将在下面的代码中看到的那样。

我正在做的是让用户输入 4 个数字:目标、推荐者、中立者和贬低者。

对于他们输入的每个推荐者,给予 100 分,中立者给予 0 分,批评者给予 -100 分。然后取最终平均值,将其与他们最初输入的目标进行比较,这就是我希望 while 循环出现的地方,我希望循环自动告诉用户他们需要多少个启动子才能实现目标。

因此,在用户目标为 75 的示例中,他们有 3 个支持者、2 个中立者和 1 个反对者。这将使他们的平均值为 33.33 (200/6)。而且,我手动算出他们还需要 10 个推广者才能使分数达到 75,因此达到了他们指定的目标。

在过去的几天里,我一直在尝试大量不同的 while 循环,但一无所获,所以这就是为什么我向你们这些专家求助。

代码如下。这只是我现在要完成的最后一 block 拼图。

这是我的 HTML 和 JavaScript。

/* eslint-env browser */
// eslint.rc
{
  "no-unused-vars" [2, {"args": "none"}]
}
"use strict";
    
$(document).ready(function () {
     
     $('#target, #proNum, #neuNum, #detNum').change(function () {

var target = $('#target').val();
var proNum = $('#proNum').val();
var neuNum = $('#neuNum').val();
var detNum = $('#detNum').val();
    
         console.log("target is equal to " + target);
         console.log("promitors is equal to " + proNum);
         console.log("neutrals is equal to " + neuNum);
         console.log("detractors is equal to " + detNum);
         
var targetTot = (target*10);
var prosTot = (proNum*100);
var neusTot = (neuNum*0);
var detsTot = (detNum*-100);
         
         console.log("Target is " + targetTot);
         
var scoresQuant = +proNum + +neuNum + +detNum;  
var scoresTot = prosTot+neusTot+detsTot;
var preCurrent = scoresTot/scoresQuant;

var current = Math.round(preCurrent*100)/100;
         
         console.log("scoresQuant is equal to " + scoresQuant);
         console.log("scoresTot is equal to " + scoresTot);
         console.log("preCurrent is equal to " + preCurrent);
         console.log(current);
         
$('#current').text(current);

var hypPro = 0;
var scoresTotLoop = scoresTot/100;
var targetLoop = target/10;
         
 while (scoresTotLoop/scoresQuant+hypPro<=targetLoop)  {
    hypPro++;
} 
  console.log("hypPro is equal to " + hypPro);       
         
$('#prosToTarget').text(hypPro);
        });
        
});
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>NPS Calculator</title>
        
        <!-- Linking to external sheets -->
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
        <script type="text/javascript" src="js/script.js"></script>
        <!-- End of linking to external sheets -->
        
        <!-- Font Imports -->
        <link href="https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,700" rel="stylesheet">
        <!-- End of font Imports -->
        
    </head>
<body>
	<div id ="headers">
		<h1>NPS Calcultor</h1>
		<h2>This site will help you work out the total number of promoters you need to achieve your target this month.</h2>
	</div>
	<div id = "calculator">
		<div id = "targetNPS">
            <table  id ="targetTable">
                <tr>
                    <td>
                        <h2>Target NPS</h2>
                    </td>
                    <td>
                        <input type="text" class="IO" id = "target"/>
                    </td>
                </tr>
            </table>
        </div> 
		<div id = "scores">
            <table id = "scoresTable">
                <tr>
                    <td>
                        <h2>Promoters</h2>
                    </td>
                    <td>
                        <h2>Neutrals</h2>
                    </td>
                    <td>
                        <h2>Detractors</h2>
                    </td>
                </tr>
                <tr>
                    <td class = "pros">
                        <input type="text" class="IO" id = "proNum"/>
                    </td>
                    <td class = "neus">
                        <input type="text" class="IO" id = "neuNum"/>
                    </td>
                    <td class = "dets">
                        <input type="text" class="IO" id = "detNum"/>
                    </td>
                </tr>
            </table>
		</div>
		<div id = "currentNPS">
            <table id = "currentTable">
                <tr>
                    <td>
                        <h2>Current NPS</h2>
                    </td>
                    <td>
                        <h2 class="IO" id = "current">0</h2>
                    </td>
                </tr>
            </table>
		</div>
		<div id = "prosToTargetNPS">
			<table id ="prosToTargetTable">
                <tr>
                    <td>
                        <h2>Promitors to Target</h2>
                    </td>
                    <td>
                        <h2 class="IO" id = "prosToTarget">0</h2>
                    </td>
                </tr>
            </table>           
		</div>
	</div>
</body>
</html>

最佳答案

考虑 x 表示所需的启动子总数 (10+3),p 表示输入启动子 (3),n 表示输入中性启动子 (2) ) 和 d 用于输入贬低者 (1)。

因此,我们有以下等式 - (100x + 0n - 100d)/(x+n+d) = 75

或者,100(x - d)/(x+n+d) = 75

或者,x-d = 0.75(x+n+d)

或者,x-0.75x = 0.75n + 0.75d +d

或者,0.25x = 0.75n + 1.75d

或者,x = (75/25)n + (175/25)d ------(1)

或者,x = 3n + 7d

由于 nd 已经存在,2 和 1,

x = 3*2 + 7*1 = 13 且 需要 x-p = 13 - 3 = 10 个启动子。

如何在代码中实现这一点?正如您在等式(1)中看到的

  1. n乘以(目标/(100-目标))
  2. d乘以(100+目标)/(100-目标)
  3. 添加它们以获得总推广者
  4. 减去输入启动子以获得所需的启动子。

无需循环。 此处假设仅通过添加启动子即可始终实现目标。

关于javascript - While 循环增加数字直到高于或等于目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52297252/

相关文章:

javascript - 如何将 asp.net 3.5 文本框输入到 JavaScript 中?

javascript - 寻找引擎来开发 2d 或 3d 等轴测图的 html5 游戏?

javascript - 如何找到大图像各部分的坐标来创建图像映射?

javascript - 如何将 jQuery Mobile 与 RequireJS 一起使用?

javascript - 如何根据内容更改 div 类?

c - 难倒 : for loop to build an array not working, 忽略初始条件?

database - 如何使用 VBA 循环 Access 某些记录、检查查询并有条件地分配字段值?

JavaScript isset() 等效

javascript - 了解箭头函数参数

javascript - 有人熟悉 wz_jsgraphics 和 setPrintable 选项吗?