问题
I have an array and var that look like this:
var paymentMilestones = [0, 30, 60, 90];
var daysOverdue = 33;
In JavaScript, how can I programmatically determine which of the paymentMilestones
indexes the daysOverdue
var is closest to? I need that value returned, so in this case the function should return 30
.
回答1:
A quick answer (if there is a tie it will bring back both - assuming the array is pre-sorted):
var paymentMilestones = [0, 30, 60, 90];
var daysOverdue = 33;
function findClose(array,elem){
var minDelta = null;
var minIndex = null;
for (var i = 0 ; i<array.length; i++){
var delta = Math.abs(array[i]-elem);
if (minDelta == null || delta < minDelta){
minDelta = delta;
minIndex = i;
}
else if (delta == minDelta) {
return [array[minIndex],array[i]];
}
// unchecked: stop if delta starts becoming bigger again
else {
return [array[i-1]];
}
}
return array[minIndex];
}
var closest = findClose(paymentMilestones,daysOverdue);
来源:https://stackoverflow.com/questions/26429260/how-can-i-determine-which-array-index-my-number-is-closest-to