Hay dos funciones
const clamp = (num, a, b) => Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); const map = (x, a, b, c, d, clamp) => (x - a) * (d - c) / (b - a) + c const c = map(-50, 0, 1, 0, 100) const _c = clamp(c, 0, 1) console.log(_c, c)¿Hay alguna manera de que las dos funciones se puedan combinar, algo así como
const _c = map(-50, 0, 1, 0, 100, {clamp: true})para que no necesite copiar parámetros de la función de mapa para obtener el nuevo valor dentro del rango de parámetros.
Es bastante fácil, solo cree una sola función y eso ejecuta secuencialmente la función de mapa original y si el parámetro de clamp es true , calcule eso y devuélvalo. Compruebe a continuación el código.
const map(x, a, b, c, d, clamp) { const map_result = (x - a) * (d - c) / (b - a) + c; if (clamp) { const clamp_result = Math.max(Math.min(map_result, Math.max(a, b)), Math.min(a, b)); return clamp_result } return map_result; } Puedes usarlo así: const _c = map(-50, 0, 1, 0, 100, true)
Puede pasar la función a la función de abrazadera y usarla dentro de la misma. O si las funciones están en la misma ubicación, puede invocarlas dentro de la función de abrazadera
const map = (x, a, b, c, d, clamp) => (x - a) * (d - c) / (b - a) + c const _map = (x, a, b, c, d, map) => Math.max(Math.min(map(x, a, b, c, d), Math.max(a, b)), Math.min(a, b)); const a = _map(-50, 0, 1, 0, 100, map) console.log(a)