Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #38763 > unrolled thread

Number not greater or less than two limits

Started byAndrew Poulos <ap_prog@hotmail.com>
First post2020-09-10 13:54 +1000
Last post2020-09-11 16:04 +0100
Articles 9 — 7 participants

Back to article view | Back to comp.lang.javascript


Contents

  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

#38763 — Number not greater or less than two limits

FromAndrew Poulos <ap_prog@hotmail.com>
Date2020-09-10 13:54 +1000
SubjectNumber 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]


#38764

From"Michael Haufe (TNO)" <tno@thenewobjective.com>
Date2020-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]


#38765

FromJulio Di Egidio <julio@diegidio.name>
Date2020-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]


#38766

FromAndrew Poulos <ap_prog@hotmail.com>
Date2020-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]


#38767

FromJon Ribbens <jon+usenet@unequivocal.eu>
Date2020-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]


#38768

From"Evertjan." <exxjxw.hannivoort@inter.nl.net>
Date2020-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]


#38769

From"Evertjan." <exxjxw.hannivoort@inter.nl.net>
Date2020-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]


#38770

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2020-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]


#38775

FromJohn G Harris <niam@jghnorth.org.uk.invalid>
Date2020-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