我有一个从- 1000到+ 1000的数字,我有一个包含数字的数组。如下所示:
[2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
我想把我得到的数字改成数组中最接近的数字。
例如,我将80
作为数字,我想让它获得82
。
发布于 2013-10-10 00:37:58
ES5版本:
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);
发布于 2016-01-26 03:18:47
ES6 (ECMAScript 2015)版本:
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/#curry或https://lodash.com/docs#curry)的curry函数。这根据您的需求提供了很大的灵活性:
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);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>
发布于 2011-12-21 12:24:45
工作代码如下:
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));
https://stackoverflow.com/questions/8584902
复制相似问题