I start off with two arrays like this
const colors = ["#00876c", "#50a26f", "#88bb72", "#c1d379", "#fde987", "#fac067", "#f49654", "#e86b4e", "#d43d51"];
const steps = [13.5, 13.6875, 13.875, 14.0625, 14.25, 14.4375, 14.625, 14.8125, 15];
Both the colors
array and steps
array have the same length, so you can interpret it as each step associating with the color at the given index.
What I'm trying to do is, based on the value of an input, fit it between the steps and associate said input with its color.
For example:
returnColor(13.2) // returns #00876c
returnColor(20) // returns #d43d51
returnColor(13.7) // returns #50a26f
returnColor(14.5) // returns #fac067
Feel free to ask any question if I haven't explained quite well.
CodePudding user response:
You can use the closest function from this answer to get the index which is most similar to the input provided.
const colors = ["#00876c", "#50a26f", "#88bb72", "#c1d379", "#fde987", "#fac067", "#f49654", "#e86b4e", "#d43d51"];
const steps = [13.5, 13.6875, 13.875, 14.0625, 14.25, 14.4375, 14.625, 14.8125, 15];
//get the index of the element which is closest to the step
function closest(num, arr) {
var curr = arr[0],
diff = Math.abs(num - curr),
index = 0;
for (var val = 0; val < arr.length; val ) {
let newdiff = Math.abs(num - arr[val]);
if (newdiff < diff) {
diff = newdiff;
curr = arr[val];
index = val;
}
}
return index;
}
function returnColor(step) {
const index = closest(step, steps);
return colors[index];
}
//Tests
console.log(returnColor(13.2)); // returns #00876c
console.log(returnColor(20)); // returns #d43d51
console.log(returnColor(13.7)); // returns #50a26f
console.log(returnColor(14.5)); // returns #fac067