从给定数字中查找数组中的上一个或下一个数字

时间:2015-07-07 09:30:42

标签: javascript arrays closest

我有一个要求,我需要从给定的数字中找到数组中的上一个或下一个数字。我已经看到以下示例,该示例返回给定数字中最接近的数字。

var values = [0, 7, 10, 17];
var givenNumber = 5;
var closest = values.reduce(function (previous, current) {
  return (Math.abs(current - givenNumber) < Math.abs(previous - givenNumber) ? current : previous);
});
console.log(closest); // outputs 7

如何返回最接近给定数字的上一个或下一个数字?例如

  • 如果givenNumber = 5,那么最接近的前一个数字将为0
  • 如果givenNumber = 5,那么最接近的下一个数字将是7

  • 如果givenNumber = 8,那么最接近的前一个数字将是7

  • 如果givenNumber = 8,那么最接近的下一个数字将是10

  • 如果givenNumber = 15,那么最接近的前一个数字将是10

  • 如果givenNumber = 15,那么最接近的下一个数字将是17

  • 如果givenNumber = 20,那么最接近的前一个数字将是17

  • 如果givenNumber = 20,那么最接近的下一个数字将为0

有关 reduce 功能的详细信息,请参阅以下内容

1 个答案:

答案 0 :(得分:-1)

尝试

var values = [0, 7, 10, 17];

function find(values, goal) {
  var closest = values.reduce(function(closest, current) {
    return (Math.abs(goal - current) < Math.abs(goal - closest) ? current : closest);
  }, Infinity);
  return closest;
}

function test(values, goal) {
  snippet.log(goal + ': ' + find(values, goal));
}

test(values, 5);
test(values, 8);
test(values, 0);
test(values, 12);
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>