Spa*_*nja 4 javascript arrays algorithm
我有一个值数组,我需要一个接受两个整数的函数,并将这两个整数分配给数组中最接近的值。
var bandwidthSteps = [0.128, 0.256, 0.512, 1, 2, 4, 5, 8, 10, 12, 15, 18, 20, 22, 25, 30, 40, 50, 55, 60, 80, 90, 100, 110, 128, 200, 256, 300, 350, 400, 450, 500];
Run Code Online (Sandbox Code Playgroud)
当出现“私有”值和“访客”值时,我需要将每个值与集合中最接近的值相匹配 - 向下舍入。
var function = closestValues(private,guest) {
//
};
Run Code Online (Sandbox Code Playgroud)
所以当这个函数给出 14 和 21 时,我需要函数返回:
private = 15
guest = 20
Run Code Online (Sandbox Code Playgroud)
因为这些是与数组中的整数最接近的匹配。注意数组中的“步数”是不规则的,不是2、5、8、11这样的。不然就容易了。
JS 函数中的解决方案会很棒,或者是制作这样的函数的正确方向。我想到的想法似乎过于复杂:对于数组中的每组两个连续数字,对这两个数字进行平均,然后确定给定的整数是否大于或小于平均值,等等。我确信还有更多简洁的方式。
您可以迭代数组并检查绝对增量和最后一个增量。
function closestValue(v) {
var value,
lastDelta;
bandwidthSteps.some(function (a) {
var delta = Math.abs(v - a);
if (delta >= lastDelta) {
return true;
}
value = a;
lastDelta = delta;
});
return value;
}
var bandwidthSteps = [0.128, 0.256, 0.512, 1, 2, 4, 5, 8, 10, 12, 15, 18, 20, 22, 25, 30, 40, 50, 55, 60, 80, 90, 100, 110, 128, 200, 256, 300, 350, 400, 450, 500];
console.log(closestValue(14));
console.log(closestValue(21));
Run Code Online (Sandbox Code Playgroud)