实际上我已经使用Vlookup在Excel上制作了这个,但现在我在网页上制作了这个。
我有一个输入框,用户将在其中输入值
<input class="text" type="text" name="rawScore" onchange="calcpercentile()">
我有一个用户可以获得结果的范围
<span id="percentile"></span>
我有两个数组
var percentile = [10, 20, 30, 40, 50, 60, 70, 80, 90];
var rawScores = [1, 3, 5, 7, 10, 12, 18, 25, 27];
如果我写的话,我应该写什么代码,所以我得到了
input value
(rawScores) (percentile)
1 10
2 20
3 30
4 40
答案 0 :(得分:1)
你的例子似乎错了。我希望得分1能够映射到第10百分位,2&amp; 3到20个百分位数,4到30个百分位数。
从本质上讲,我认为你要做的是:找到第一个原始分数的数组索引大于输入,并从百分位数组中返回相应的值。
Javascript看起来像这样:
<html>
<body>
<h1 style="background-color:transparent;">Test</h1>
</body>
</html>
请注意,Array#findIndex()
的浏览器支持受到限制。如果您需要广泛的浏览器支持,基于循环的简单方法可能会更好:
var percentiles = [10, 20, 30, 40, 50, 60, 70, 80, 90];
var rawScores = [1, 3, 5, 7, 10, 12, 18, 25, 27];
function map(input) {
let index = rawScores.findIndex(rawScore => rawScore >= input);
return percentiles[index];
}
console.log(map(1));
console.log(map(2));
console.log(map(3));
console.log(map(4));
答案 1 :(得分:0)
你可以输入文字:1
跨度显示“10”
window.onload = function(){
var percentile = [0,10, 20, 30, 40, 50, 60, 70, 80, 90];
document.getElementById("rawScore").onchange = function () {
var index = document.getElementById("rawScore").value;
document.getElementById("percentile").innerHTML = percentile[index];
}
}
<input class="text" type="text" id="rawScore">
<span id="percentile"></span>
答案 2 :(得分:0)
当然首先要对数据集进行排序
const arr = [0,2,5,2,7,3];
const data = arr.sort();
接下来可能有帮助的是这个函数来找到最接近数字的索引。
console.log(findClosestIndex([0, 1, 2, 3.5, 4.5, 5], 4));
// output: 3
console.log(findClosestIndex([0, 1, 2, 3.49, 4.5, 5], 4));
// output: 4
console.log(findClosestIndex([0, 1, 2, 3.49, 4.5, 5], 90));
// output: 5
console.log(findClosestIndex([0, 1, 2, 3.49, 4.5, 5], -1));
// output: 0
function findClosestIndex(arr, element) {
let from = 0, until = arr.length - 1
while (true) {
const cursor = Math.floor((from + until) / 2);
if (cursor === from) {
const diff1 = element - arr[from];
const diff2 = arr[until] - element;
return diff1 <= diff2 ? from : until;
}
const found = arr[cursor];
if (found === element) return cursor;
if (found > element) {
until = cursor;
} else if (found < element) {
from = cursor;
}
}
}
所以,现在您知道了您的索引和数组的长度。你必须从中得到一个百分位数。让我们先计算一个准确的百分比。
const index = findClosestIndex(data, input);
const pct = index / arr.length;
把这个百分比变成百分位数是一个四舍五入的问题。
const percentile = (Math.floor(pct/10)+1) * 10;
(PS:当股票当前价格处于每日交易价格率的某个百分位时,我使用此功能买入/卖出股票。)