Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #38763 > unrolled thread
| Started by | Andrew Poulos <ap_prog@hotmail.com> |
|---|---|
| First post | 2020-09-10 13:54 +1000 |
| Last post | 2020-09-11 16:04 +0100 |
| Articles | 9 — 7 participants |
Back to article view | Back to comp.lang.javascript
Number not greater or less than two limits Andrew Poulos <ap_prog@hotmail.com> - 2020-09-10 13:54 +1000
Re: Number not greater or less than two limits "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2020-09-09 23:09 -0700
Re: Number not greater or less than two limits Julio Di Egidio <julio@diegidio.name> - 2020-09-09 23:56 -0700
Re: Number not greater or less than two limits Andrew Poulos <ap_prog@hotmail.com> - 2020-09-10 17:44 +1000
Re: Number not greater or less than two limits Jon Ribbens <jon+usenet@unequivocal.eu> - 2020-09-10 11:25 +0000
Re: Number not greater or less than two limits "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2020-09-10 15:00 +0200
Re: Number not greater or less than two limits "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2020-09-10 15:59 +0200
Re: Number not greater or less than two limits Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2020-09-10 19:01 +0200
Re: Number not greater or less than two limits John G Harris <niam@jghnorth.org.uk.invalid> - 2020-09-11 16:04 +0100
| From | Andrew Poulos <ap_prog@hotmail.com> |
|---|---|
| Date | 2020-09-10 13:54 +1000 |
| Subject | Number not greater or less than two limits |
| Message-ID | <aZidnYDptsznPsTCnZ2dnUU7-XnNnZ2d@westnet.com.au> |
Say a number value gets calculated and if it is less than a given value it gets set to that value and if it is greater than another given value it gets set to that value otherwise the value is left as it is. For example, if a minimum is set as 3 and a maximum as 10. Then if the value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it stays as 7. It is easy enough to solve with a couple of if statements but I'm wondering if there's a "clever" one-liner that can be used instead. Andrew Poulos
[toc] | [next] | [standalone]
| From | "Michael Haufe (TNO)" <tno@thenewobjective.com> |
|---|---|
| Date | 2020-09-09 23:09 -0700 |
| Message-ID | <48ba7726-83a8-4cd9-b963-22bca6e03849o@googlegroups.com> |
| In reply to | #38763 |
On Wednesday, September 9, 2020 at 10:54:48 PM UTC-5, Andrew Poulos wrote:
> Say a number value gets calculated and if it is less than a given value
> it gets set to that value and if it is greater than another given value
> it gets set to that value otherwise the value is left as it is.
>
> For example, if a minimum is set as 3 and a maximum as 10. Then if the
> value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it
> stays as 7.
>
> It is easy enough to solve with a couple of if statements but I'm
> wondering if there's a "clever" one-liner that can be used instead.
This is commonly called "clamp". This is currently proposed for a future version of JavaScript as Math.clamp:
<https://rwaldron.github.io/proposal-math-extensions/#sec-math.clamp>
Until and unless that becomes standard you can use the following:
```
function clamp(num, min, max) {
return num <= min ? min : num >= max ? max : num;
}
```
[toc] | [prev] | [next] | [standalone]
| From | Julio Di Egidio <julio@diegidio.name> |
|---|---|
| Date | 2020-09-09 23:56 -0700 |
| Message-ID | <06416420-312e-4679-81f7-4c5e97d71e61o@googlegroups.com> |
| In reply to | #38763 |
On Thursday, 10 September 2020 05:54:48 UTC+2, Andrew Poulos wrote: > Say a number value gets calculated and if it is less than a given value > it gets set to that value and if it is greater than another given value > it gets set to that value otherwise the value is left as it is. > > For example, if a minimum is set as 3 and a maximum as 10. Then if the > value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it > stays as 7. > > It is easy enough to solve with a couple of if statements but I'm > wondering if there's a "clever" one-liner that can be used instead. Another way to write it is Math.max(low, Math.min(high, val)), though I don't think it's a particularly illuminating style, unless you are doing some mathematical programming, i.e. in the context of mathematical formulas already: anyway, it's still implicitly doing the couple of if's, and readability is way more important than the number of keystrokes... Julio
[toc] | [prev] | [next] | [standalone]
| From | Andrew Poulos <ap_prog@hotmail.com> |
|---|---|
| Date | 2020-09-10 17:44 +1000 |
| Message-ID | <96edndhQHKLGRMTCnZ2dnUU7-RfNnZ2d@westnet.com.au> |
| In reply to | #38765 |
On 10/09/2020 4:56 pm, Julio Di Egidio wrote: > On Thursday, 10 September 2020 05:54:48 UTC+2, Andrew Poulos wrote: >> Say a number value gets calculated and if it is less than a given value >> it gets set to that value and if it is greater than another given value >> it gets set to that value otherwise the value is left as it is. >> >> For example, if a minimum is set as 3 and a maximum as 10. Then if the >> value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it >> stays as 7. >> >> It is easy enough to solve with a couple of if statements but I'm >> wondering if there's a "clever" one-liner that can be used instead. > > Another way to write it is Math.max(low, Math.min(high, val)), > though I don't think it's a particularly illuminating style, > unless you are doing some mathematical programming, i.e. in > the context of mathematical formulas already: anyway, it's > still implicitly doing the couple of if's, and readability > is way more important than the number of keystrokes... Yep, I'll stay with my if statements. Andrew Poulos
[toc] | [prev] | [next] | [standalone]
| From | Jon Ribbens <jon+usenet@unequivocal.eu> |
|---|---|
| Date | 2020-09-10 11:25 +0000 |
| Message-ID | <slrnrlk38q.ja8i.jon+usenet@raven.unequivocal.eu> |
| In reply to | #38763 |
On 2020-09-10, Andrew Poulos <ap_prog@hotmail.com> wrote: > Say a number value gets calculated and if it is less than a given value > it gets set to that value and if it is greater than another given value > it gets set to that value otherwise the value is left as it is. > > For example, if a minimum is set as 3 and a maximum as 10. Then if the > value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it > stays as 7. > > It is easy enough to solve with a couple of if statements but I'm > wondering if there's a "clever" one-liner that can be used instead. value = min(maximum_value, max(minimum_value, value))
[toc] | [prev] | [next] | [standalone]
| From | "Evertjan." <exxjxw.hannivoort@inter.nl.net> |
|---|---|
| Date | 2020-09-10 15:00 +0200 |
| Message-ID | <XnsAC3498AFECBE1eejj99@194.109.6.166> |
| In reply to | #38767 |
Jon Ribbens wrote on 10 Sep 2020 in comp.lang.javascript: > value = min(maximum_value, max(minimum_value, value)) const clamp = (mini,valu, maxi) => Math.min(maxi, Math.max(mini, valu)); let res = clamp(1, 2, 3); console.log( res ); // 2 res = clamp(1, 4, 3); console.log( res ); // 3 res = clamp(1, 0, 3); console.log( res ); // 1 -- Evertjan. The Netherlands. (Please change the x'es to dots in my emailaddress)
[toc] | [prev] | [next] | [standalone]
| From | "Evertjan." <exxjxw.hannivoort@inter.nl.net> |
|---|---|
| Date | 2020-09-10 15:59 +0200 |
| Message-ID | <XnsAC34A2B9CF226eejj99@194.109.6.166> |
| In reply to | #38768 |
"Evertjan." <exxjxw.hannivoort@inter.nl.net> wrote on 10 Sep 2020 in
comp.lang.javascript:
> Jon Ribbens wrote on 10 Sep 2020 in comp.lang.javascript:
>> value = min(maximum_value, max(minimum_value, value))
>
> const clamp = (mini,valu, maxi) => Math.min(maxi, Math.max(mini, valu));
>
> let res = clamp(1, 2, 3);
> console.log( res ); // 2
>
> res = clamp(1, 4, 3);
> console.log( res ); // 3
>
> res = clamp(1, 0, 3);
> console.log( res ); // 1
or:
Number.prototype.clamp = function(min, max) {
return Math.min(Math.max(1*this, min), max);
};
let res = 3.888.clamp(1, 3.7);
console.log( res ); // 3.7
--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
[toc] | [prev] | [next] | [standalone]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2020-09-10 19:01 +0200 |
| Message-ID | <5403534.DvuYhMxLoT@PointedEars.de> |
| In reply to | #38763 |
Andrew Poulos wrote: > Say a number value gets calculated and if it is less than a given value > it gets set to that value and if it is greater than another given value > it gets set to that value otherwise the value is left as it is. > > For example, if a minimum is set as 3 and a maximum as 10. Then if the > value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it > stays as 7. > > It is easy enough to solve with a couple of if statements but I'm > wondering if there's a "clever" one-liner that can be used instead. var min = 3; var max = 10; value = ((value < min) ? min : ((value > max) ? max : value)); So you can write that literally literally (sic!) in one line. This is equivalent to if (value < min) value = min; else if (value > max) value = max; provided that “value” does not have a peculiar getter or setter. -- PointedEars FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix> <https://github.com/PointedEars> | <http://PointedEars.de/wsvn/> Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.
[toc] | [prev] | [next] | [standalone]
| From | John G Harris <niam@jghnorth.org.uk.invalid> |
|---|---|
| Date | 2020-09-11 16:04 +0100 |
| Message-ID | <gd4nlfdnpgsodcuiu3pb4o2n4j6laeto87@4ax.com> |
| In reply to | #38763 |
On Thu, 10 Sep 2020 13:54:31 +1000, Andrew Poulos <ap_prog@hotmail.com> wrote: >Say a number value gets calculated and if it is less than a given value >it gets set to that value and if it is greater than another given value >it gets set to that value otherwise the value is left as it is. > >For example, if a minimum is set as 3 and a maximum as 10. Then if the >value is 2 it becomes 3, if it is 12 it becomes 10, and if it is 7 it >stays as 7. > >It is easy enough to solve with a couple of if statements but I'm >wondering if there's a "clever" one-liner that can be used instead. Are there pre-conditions on the numbers? Is NaN allowed; is infinity allowed? John
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.javascript
csiph-web