Vlookup喜欢javascript中的函数

时间:2016-10-21 04:14:53

标签: javascript web vlookup indexof

实际上我已经使用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

3 个答案:

答案 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:当股票当前价格处于每日交易价格率的某个百分位时,我使用此功能买入/卖出股票。)