我是Lodash的新手,刚刚获得了使用javascript进行函数式编程的感觉。我正在使用lodash 3.0.0-pre。如何使用lodash从数组中获取前两个最接近的数字?
我有一个按顺序排列的数字和一个目标数字。
我需要一个数组,第一个和第二个最接近的数字,除非它是最后一个数字,我只需要它。我如何得到使用lodash?
我发现:
function getClosest(array, target) {
var tuples = _.map(array, function(val) {
return [val, Math.abs(val - target)];
});
return _.reduce(tuples, function(memo, val) {
return (memo[1] < val[1]) ? memo : val;
}, [-1, 999])[0];
}
我可以改变它给我最近的两个而不是一个,但我相信它会遍历整个数组序列只是停止一旦它,因为它需要两个数字,而不是当数字的差异开始增加时,它可以停止。
你能提供一些信息,说明为什么不使用lodash进行循环? –
@CalebKester,只是不要迭代整个数组,因为里面的项目已经排序了。二进制搜索适用于'O(log n)',它比'_.map' +'_.reduce'快 – Kiril