This might get you close. It doesn’t matter what the value of the slider is, the expression just looks at the timing of the keyframes. At the 2nd keyframe, it will ease into the second value of your array, and so on.
easeTime = framesToTime(10); // ease for 10 frames
//Define position values
posOptions = [320, 360, 400, 440, 480];
//Slider to select position from array
rowSelect = thisLayer("Effects")("rowSelect")("Slider");
newY = posOptions[0];
if (rowSelect.numKeys > 0){
n = rowSelect.nearestKey(time).index;
if (time < rowSelect.key(n).time) n--;
n = Math.min(n,posOptions.length);
if (n == posOptions.length){
newY = posOptions[n-1];
}else if (n > 0){
y1 = posOptions[n-1];
y2 = posOptions[n];
t2 = rowSelect.key(n+1).time;
t1 = t2 - easeTime;
newY = ease(time,t1,t2,y1,y2);
}
}
//Final position
[960,newY];