首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从数组中获取最接近的数字

从数组中获取最接近的数字
EN

Stack Overflow用户
提问于 2011-12-21 11:55:35
回答 13查看 179.9K关注 0票数 205

我有一个从- 1000到+ 1000的数字,我有一个包含数字的数组。如下所示:

代码语言:javascript
复制
[2, 42, 82, 122, 162, 202, 242, 282, 322, 362]

我想把我得到的数字改成数组中最接近的数字。

例如,我将80作为数字,我想让它获得82

EN

回答 13

Stack Overflow用户

发布于 2013-10-10 00:37:58

ES5版本:

代码语言:javascript
复制
var counts = [4, 9, 15, 6, 2],
  goal = 5;

var closest = counts.reduce(function(prev, curr) {
  return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});

console.log(closest);

票数 253
EN

Stack Overflow用户

发布于 2016-01-26 03:18:47

ES6 (ECMAScript 2015)版本:

代码语言:javascript
复制
const counts = [4, 9, 15, 6, 2];
const goal = 5;

const output = counts.reduce((prev, curr) => Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);

console.log(output);

为了提高可重用性,您可以封装一个支持占位符(http://ramdajs.com/0.19.1/docs/#curryhttps://lodash.com/docs#curry)的curry函数。这根据您的需求提供了很大的灵活性:

代码语言:javascript
复制
const getClosest = _.curry((counts, goal) => {
  return counts.reduce((prev, curr) => Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});

const closestToFive = getClosest(_, 5);
const output = closestToFive([4, 9, 15, 6, 2]);

console.log(output);
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

票数 76
EN

Stack Overflow用户

发布于 2011-12-21 12:24:45

工作代码如下:

代码语言:javascript
复制
var array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];

function closest(array, num) {
  var i = 0;
  var minDiff = 1000;
  var ans;
  for (i in array) {
    var m = Math.abs(num - array[i]);
    if (m < minDiff) {
      minDiff = m;
      ans = array[i];
    }
  }
  return ans;
}
console.log(closest(array, 88));

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8584902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档