How can I make this cost calculator script shorter? [closed] - javascript

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 8 years ago.
Improve this question
function Method(Distance,Cost,Milage) {
result1=parseInt(Distance/Cost*Milage);
result2=parseInt(Distance/46*Cost);
alert('Your trip will costs '+ result1 +' $');
alert('Your trip in hybrid costs '+ result2 +' $');
if ((result1-result2)<0)
alert('You will save '+(result2-result1)+' $');
else
alert('You will save '+(result1-result2)+' $');
}
}
What can I do to make this shorter?

Yes:
alert("You will save "+Math.abs(result1-result2)+" $");
This will always output the "gap" as a positive number.
As an aside, parseInt is redundant since you are already casting to numbers with the / and * operators.

yes and no, at least you can write shorter :
instead off calling
Method(Distance,Cost,Milage);
everytime.
you could just alert
alert("You will save "+Math.abs((Distance/Cost*Milage)-(Distance/46*Cost)+" $");
everytime

Related

I don't know endsWith in javascript work like this and more1111 [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 12 months ago.
Improve this question
const str = 'Do. Or do not. There is no try.';
console.log(str.endsWith('try', 30)); //true
console.log(str.endsWith('try.', 30)); //false
Can anyone explain why in example 2 it is false. I think it is similar with above and must return true?
Because in endsWith() the second parameter is length.
The string
Do. Or do not. There is no try.
is 31 characters long, by setting the length parameter to 30, you're only testing
Do. Or do not. There is no try
which does not end with try.
As Ian said, you can omit the length parameter to test the entire string:
const str = 'Do. Or do not. There is no try.';
console.log(str.endsWith('try')); // false
console.log(str.endsWith('try.')); // true
It's because y is the 30th character, and in the length parameter of the function call you've specified it should test the ending of the first 30 characters of the string. Therefore it doesn't take the . (which is the 31st character) into account.
You're actually only testing the following text:
Do. Or do not. There is no try
More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

Regex to test an expression [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 3 years ago.
Improve this question
I have this expression:
/width*$/.test(oldStyle)
And oldStyle has this inside of it:
width:90%;height:inherit;padding-left:20px;
The expression should return true as i have tested it in a online JavaScript regex expression tool.
Why is this returning false?
Can i use this expression the way i have coded?
You need to use . to match any character followed by the * to match 1 or more.
const oldStyle = 'width:90%;height:inherit;padding-left:20px;';
const result = /width.*$/.test(oldStyle);
document.getElementById('result').innerHTML = "Result: " + result;
<div id="result"></div>

My prompt won't return a string, it only returns NaN [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 4 years ago.
Improve this question
I'm quite new to this and cannot understand what is going on.
My code is as follows:
let p = prompt("Enter your name, please", "");
let o = prompt("Enter your age, please.", "");
let fname = parseInt(p);
let age = parseInt(o);
let year = (2018 - age);
document.getElementById("p1");
p1.innerHTML = fname + ", you were born in " + year;
When all the is entered on the browser, I end up with something that reads:
"NaN, you were born in 1990"
The number part works, but the string doesn't.
You're running parseInt() on your first name field. Just remove that parseInt call since your name is not an integer!

parseInt failing in IE [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Closed 6 years ago.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Improve this question
Pretty self explanatory when you look at the following, but basically, a date string in a disabled field is pulled out. I split it by the forward slash, and I have tried everything I can think of to parse it into a number, but nothing works? I have been at this for hours. Any thoughts?
$('input[id$="ChestImagingDay5"]').val();
"‎8‎/‎6‎/‎2015"
$('input[id$="ChestImagingDay5"]').val().split('/')
[
0: "‎8‎",
1: "‎6‎",
2: "‎2015",
length: 3
]
$('input[id$="ChestImagingDay5"]').val().split('/')[0]
"‎8‎"
parseInt($('input[id$="ChestImagingDay5"]').val().split('/')[0])
NaN
parseInt($('input[id$="ChestImagingDay5"]').val().toString().split('/')[0])
NaN
parseInt($('input[id$="ChestImagingDay5"]').val().toString().split('/')[0].toString())
NaN
parseInt($('input[id$="ChestImagingDay5"]').val().toString().split('/')[0].toString(),10)
NaN
parseInt($('input[id$="ChestImagingDay5"]').val().toString().split('/')[0].toString(),'10')
NaN
Edit:
<input name="ctl00$ctl00$cphMain$plFormContent$txtChestImagingDay5" type="text" id="cphMain_plFormContent_txtChestImagingDay5" disabled="disabled" class="aspNetDisabled classTarget" style="width:94px;">
You correctly pointed out the likely problem in the comments; if you have a ‎, it makes parseInt fail. You could strip out unprintable characters.
var parts = document.querySelector('input').value.split('/');
var int = parseInt(parts[0], 10);
console.log('Wrong Int value: ' + int); //NaN
// To make sure it works, strip out any non-printing characters.
// Got this regex from https://jsfiddle.net/shivassmca/8b0x66af/2/
// Mileage may vary, may be overkill
var re = /[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g;
var betterInt = parseInt( parts[0].replace(re, ''), 10 );
console.log('Correct Int value: ' + betterInt); //8
<input value="‎8/12/07">

If statement not executing when credentials are met [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 8 years ago.
Improve this question
I'm trying to make a simple code that checks if the phone number entered by the user is in the proper format, but my if statement will not execute when all three credentials are met, it will only print the "please type the phone number..." or a blank screen, even if I type in the number correctly.
var phonenumber=prompt("What is your phone number?", "");
var firstdash=phonenumber.charAt(3);
var seconddash=phonenumber.charAt(7);
var length=phonenumber.length;
if(firstdash=='-' && secondash=='-' && length==12)
{document.write("Your phone number is "+phonenumber+", thank you.");}
else
{document.write("Please type the phone number in the proper format (555-555-1234)");}
seconddash is spelled wrong in your condition, you're missing the second d - always have your console open when developing.. you would have seen:
Uncaught ReferenceError: secondash is not defined
It should be seconddash not secondash in the if statement.
var phonenumber=prompt("What is your phone number?", "");
var firstdash=phonenumber.charAt(3);
var seconddash=phonenumber.charAt(7);
var length=phonenumber.length;
if(firstdash=='-' && seconddash=='-' && length==12)
{document.write("Your phone number is "+phonenumber+", thank you.");}
else
{document.write("Please type the phone number in the proper format (555-555-1234)");}
Can I recommend a different approach? If you are only checking the number is in the right format, then use a regex:
var phoneNumber = prompt("What is your phone number?", "");
if(isValidPhoneNumber(phoneNumber)) {
document.write("Your phone number is "+ phoneNumber +", thank you.");
} else {
document.write("Please type the phone number in the proper format (555-555-1234)");
}
function isValidPhoneNumber(phoneNumber)
{
return /^\d{3}-\d{3}-\d{4}$/.test(phoneNumber);
}

Categories

Resources