Short(er) hand for min max percentage?
I have a function that converts two values to a percentage within a range, in this case between 15000 and 100000. It feels very clunky. Is there a more simple way to express this which is easy/easier to understand?
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
// Specifically these values
price = price > 100000 ? 100000 : price;
price = price < 15000 ? 15000 : price;
return (price - 1500) / 85000;
}
javascript ecmascript-6
add a comment |
I have a function that converts two values to a percentage within a range, in this case between 15000 and 100000. It feels very clunky. Is there a more simple way to express this which is easy/easier to understand?
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
// Specifically these values
price = price > 100000 ? 100000 : price;
price = price < 15000 ? 15000 : price;
return (price - 1500) / 85000;
}
javascript ecmascript-6
add a comment |
I have a function that converts two values to a percentage within a range, in this case between 15000 and 100000. It feels very clunky. Is there a more simple way to express this which is easy/easier to understand?
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
// Specifically these values
price = price > 100000 ? 100000 : price;
price = price < 15000 ? 15000 : price;
return (price - 1500) / 85000;
}
javascript ecmascript-6
I have a function that converts two values to a percentage within a range, in this case between 15000 and 100000. It feels very clunky. Is there a more simple way to express this which is easy/easier to understand?
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
// Specifically these values
price = price > 100000 ? 100000 : price;
price = price < 15000 ? 15000 : price;
return (price - 1500) / 85000;
}
javascript ecmascript-6
javascript ecmascript-6
edited Nov 20 '18 at 11:12
Will Madden
2,48321517
2,48321517
asked Nov 20 '18 at 10:55
HimmatorsHimmators
5,7092687175
5,7092687175
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
You might use Math.min
and Math.max
to constrain the ranges:
const adjustedPrice = Math.min(
100000, // can be no higher than 100000
Math.max(price, 15000) // can be no lower than 15000
);
return (adjustedPrice - 1500) / 85000;
Another option is nested conditionals, which will reduce the number of unnecessary reassignments, though it doesn't exactly make the code clearer:
const adjustedPrice =
price > 100000 ? 100000 :
price < 15000 ? 15000 : price
add a comment |
I usually use this utility for things like that:
const clamp = (value, min, max) => value > min? value < max? value: max: min;
price2percent = (sale) => {
let price = clamp(sale.soldPrice / sale.livingArea, 15000, 100000);
return (price - 1500) / 85000;
}
I find that more readable than the Math.min(max, Math.max(min, value))
construct.
Downside, in its current version it doesn't play well with NaN
.
add a comment |
Is there a more simple way to express this which is easy/easier to understand?
Easy to understand would be using if/else condition:
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
if(price > 100000) price = 100000
else if(price < 15000) price = 15000
return (price - 1500) / 85000;
}
Which can be expressed shorter as: (the harder way)
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
price = price > 100000 ? 100000 : (price < 15000 ? 15000 : price)
return (price - 1500) / 85000;
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391448%2fshorter-hand-for-min-max-percentage%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You might use Math.min
and Math.max
to constrain the ranges:
const adjustedPrice = Math.min(
100000, // can be no higher than 100000
Math.max(price, 15000) // can be no lower than 15000
);
return (adjustedPrice - 1500) / 85000;
Another option is nested conditionals, which will reduce the number of unnecessary reassignments, though it doesn't exactly make the code clearer:
const adjustedPrice =
price > 100000 ? 100000 :
price < 15000 ? 15000 : price
add a comment |
You might use Math.min
and Math.max
to constrain the ranges:
const adjustedPrice = Math.min(
100000, // can be no higher than 100000
Math.max(price, 15000) // can be no lower than 15000
);
return (adjustedPrice - 1500) / 85000;
Another option is nested conditionals, which will reduce the number of unnecessary reassignments, though it doesn't exactly make the code clearer:
const adjustedPrice =
price > 100000 ? 100000 :
price < 15000 ? 15000 : price
add a comment |
You might use Math.min
and Math.max
to constrain the ranges:
const adjustedPrice = Math.min(
100000, // can be no higher than 100000
Math.max(price, 15000) // can be no lower than 15000
);
return (adjustedPrice - 1500) / 85000;
Another option is nested conditionals, which will reduce the number of unnecessary reassignments, though it doesn't exactly make the code clearer:
const adjustedPrice =
price > 100000 ? 100000 :
price < 15000 ? 15000 : price
You might use Math.min
and Math.max
to constrain the ranges:
const adjustedPrice = Math.min(
100000, // can be no higher than 100000
Math.max(price, 15000) // can be no lower than 15000
);
return (adjustedPrice - 1500) / 85000;
Another option is nested conditionals, which will reduce the number of unnecessary reassignments, though it doesn't exactly make the code clearer:
const adjustedPrice =
price > 100000 ? 100000 :
price < 15000 ? 15000 : price
answered Nov 20 '18 at 10:58
CertainPerformanceCertainPerformance
89k154977
89k154977
add a comment |
add a comment |
I usually use this utility for things like that:
const clamp = (value, min, max) => value > min? value < max? value: max: min;
price2percent = (sale) => {
let price = clamp(sale.soldPrice / sale.livingArea, 15000, 100000);
return (price - 1500) / 85000;
}
I find that more readable than the Math.min(max, Math.max(min, value))
construct.
Downside, in its current version it doesn't play well with NaN
.
add a comment |
I usually use this utility for things like that:
const clamp = (value, min, max) => value > min? value < max? value: max: min;
price2percent = (sale) => {
let price = clamp(sale.soldPrice / sale.livingArea, 15000, 100000);
return (price - 1500) / 85000;
}
I find that more readable than the Math.min(max, Math.max(min, value))
construct.
Downside, in its current version it doesn't play well with NaN
.
add a comment |
I usually use this utility for things like that:
const clamp = (value, min, max) => value > min? value < max? value: max: min;
price2percent = (sale) => {
let price = clamp(sale.soldPrice / sale.livingArea, 15000, 100000);
return (price - 1500) / 85000;
}
I find that more readable than the Math.min(max, Math.max(min, value))
construct.
Downside, in its current version it doesn't play well with NaN
.
I usually use this utility for things like that:
const clamp = (value, min, max) => value > min? value < max? value: max: min;
price2percent = (sale) => {
let price = clamp(sale.soldPrice / sale.livingArea, 15000, 100000);
return (price - 1500) / 85000;
}
I find that more readable than the Math.min(max, Math.max(min, value))
construct.
Downside, in its current version it doesn't play well with NaN
.
edited Nov 20 '18 at 20:05
answered Nov 20 '18 at 11:13
ThomasThomas
4,867159
4,867159
add a comment |
add a comment |
Is there a more simple way to express this which is easy/easier to understand?
Easy to understand would be using if/else condition:
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
if(price > 100000) price = 100000
else if(price < 15000) price = 15000
return (price - 1500) / 85000;
}
Which can be expressed shorter as: (the harder way)
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
price = price > 100000 ? 100000 : (price < 15000 ? 15000 : price)
return (price - 1500) / 85000;
}
add a comment |
Is there a more simple way to express this which is easy/easier to understand?
Easy to understand would be using if/else condition:
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
if(price > 100000) price = 100000
else if(price < 15000) price = 15000
return (price - 1500) / 85000;
}
Which can be expressed shorter as: (the harder way)
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
price = price > 100000 ? 100000 : (price < 15000 ? 15000 : price)
return (price - 1500) / 85000;
}
add a comment |
Is there a more simple way to express this which is easy/easier to understand?
Easy to understand would be using if/else condition:
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
if(price > 100000) price = 100000
else if(price < 15000) price = 15000
return (price - 1500) / 85000;
}
Which can be expressed shorter as: (the harder way)
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
price = price > 100000 ? 100000 : (price < 15000 ? 15000 : price)
return (price - 1500) / 85000;
}
Is there a more simple way to express this which is easy/easier to understand?
Easy to understand would be using if/else condition:
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
if(price > 100000) price = 100000
else if(price < 15000) price = 15000
return (price - 1500) / 85000;
}
Which can be expressed shorter as: (the harder way)
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
price = price > 100000 ? 100000 : (price < 15000 ? 15000 : price)
return (price - 1500) / 85000;
}
edited Nov 20 '18 at 12:52
answered Nov 20 '18 at 12:47
Bhojendra RauniyarBhojendra Rauniyar
51.6k2079127
51.6k2079127
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391448%2fshorter-hand-for-min-max-percentage%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown