javascript - 如果出现平局,如何在 javascript 中返回较小的数字?

标签 javascript arrays if-statement min

我需要编写一个接受两个输入“目标”(整数)和“值”(整数列表)的函数,并找到“值”中最接近“目标”的数字。我想出了以下内容:

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/

相关文章:

R:从其他表创建值矩阵

javascript - 为什么 isNaN 总是返回 true

javascript - 如何有条件地更新对象的属性?

javascript - Ajax 每分钟调用一次

python - 与使用两个 Numpy 数组进行矢量化相比,为什么使用 Numpy 数组和 int 进行算术运算时减法更快?

SQL Server IF EXISTS THEN 1 ELSE 2

javascript - 将图像置于文本之上

php - 为数组中的每个项目循环 MySQL-Query 10 次(PHP 和 MySQL)

java - 二分查找的使用示例

java - 有没有办法重构这些 if 语句?