我想知道如何在javascript中知道最接近的另一个号码。
例如:
如果我们得到3个数字,1,2和5。
我怎么能知道最接近4的数字,即5。
提前干杯谢谢。
答案 0 :(得分:1)
您可以使用for loop
答案 1 :(得分:0)
我会给你一个算法 - 也许它会帮助你。
Loop through your comparison numbers (e.g. 1, 2, and 5).
On each loop iteration: {
Calculate the delta between the comparison number and your
target number (e.g. 5). The delta is the absolute value
from subtracting one number from the other. E.g. delta of 4 and 5 is 1.
If the delta is the smallest so far, store that delta and
the value it corresponds to in tracking variables. Or if no
values have yet been assigned to those tracking variables,
also store the delta and corresponding value.
}
After loop exit, return the "corresponding value" from your tracking variables.
如果您有跟进问题,请尝试提供一些代码,以显示您遇到问题的具体问题。
答案 2 :(得分:0)
假设您在名为nums
的数组中包含您的号码,并且您要在变量x
中比较您的号码
var nums = [1, 2, 5];
var x = 4
您可以执行以下操作:
function findClosest (nums, x) {
var sortNums = nums.sort(function(a, b){return a-b});
var diff = [];
var x = nums.length;
for (i = 0; i < x; i++) {
diff[i] = Math.abs(sortNums[i] - n);
}
var sortDiff = diff.sort(function(a, b){return a-b});
var smallestDiff = sortDiff[0];
for (i = 0; i < x; i++) {
if (smallestDiff == Math.abs(nums[i] - n)) {
return nums[i];
}
}
}
然后你调用函数:
findClosest (nums, x);
注意:如果您有2个与x接近的数字,例如如果x=5
并且您有4和6作为最接近的数字,那么您将获得数组nums
中最早的数字。
答案 3 :(得分:0)
基于Erik Hermansen的算法,我制作了这段代码。它可能比我之前的答案更有效,因为它只有一个循环,并且不涉及排序。
同样,如果有两个不同的数字具有相同的差异,那么将返回数组中首先出现的数字。
var numbers = [1, 2, 5];
var terget = 4;
function findClosest (nums, x) {
n = nums.length;
var diff = -1;
var smallest;
var d;
var smallArray = [];
for (i = 0; i < n; i++) {
d = Math.abs(nums[i] - x);
if (diff < 0 || d < diff) {
diff = d;
smallest = nums[i];
}
}
return smallest;
}
findClosest (numbers, target);