我需要编写一个接受两个输入“目标”(整数)和“值”(整数列表)的函数,并找到“值”中最接近“目标”的数字。我想出了以下内容:
var targetNum = 0;
var valuesArr = [2, 4, 6, 8, 10];
function closestToTarget(target, values) {
var currVal = values[0];
var diff = Math.abs(target - currVal);
for (var i = 0; i < values.length; i++) {
var currDiff = Math.abs(target - values[i]);
if (currDiff < diff) {
diff = currDiff;
currVal = values[i];
}
}
return currVal;
}
alert(closestToTarget(targetNum, valuesArr));
该函数有效,但在平局的情况下我无法返回较小的值。我能想到的最好的是以下不起作用:
function closestToTarget(target, values) {
var currVal = values[0];
var diff = Math.abs(target - currVal);
for (var i = 0; i < values.length; i++) {
var currDiff = Math.abs(target - values[i]);
if (currDiff < diff) {
diff = currDiff;
currVal = values[i];
}
else if (currDiff == diff) {
return Math.min[currVal, values[i]];
}
else {
return currVal[i - 1];
}
}
return currVal;
}
如果出现平局,如何在 JavaScript 中返回较小的数字?
最佳答案
您的代码看起来应该可以尝试将 Math.min[currVal,values[i]]
更改为 Math.min(currVal,values[i])
如果您的值是有序的(简单的语法问题),则应该可以工作。
正如 kojow7 提到的,只要值
有序,第一个函数也应该起作用。
否则,您应该尝试执行 currVal = Math.min(...)
并继续迭代,然后返回,而不是 return Math.min(...)
循环后的 currVal 。这只是确保您检查 values
数组中的每个值,以确保您没有遗漏任何内容(但如果它是有序的,则无需继续检查,因为差异只会增加) .
关于javascript - 如果出现平局,如何在 javascript 中返回较小的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43857994/