hotdog1983 Posted December 15, 2010 Share Posted December 15, 2010 Hi guys, I'm a noob in javascript.. I'm trying to optimize my site.I have a code like this that rounds up numbers to different decimal points depending on the input. function getXMLHTTP() { var xmlhttp=false; try{ xmlhttp=new XMLHttpRequest(); } catch(e) { try{ xmlhttp= new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e1){ xmlhttp=false; } } } return xmlhttp; }function getCurrencyCode(strURL){ var req = getXMLHTTP(); if (req) { //function to be called when state is changed req.onreadystatechange = function() { //when state is completed i.e 4 if (req.readyState == 4) { // only if http status is "OK" if (req.status == 200) { exr = req.responseText.split("|"); if (isNaN(exr[0])) { alert("There was a problem retrieving exchange rate. Please try again."); return false; } if (exr[1]=="") { document.getElementById('usf').innerHTML=(exr[0]*1.3).toFixed(3); document.getElementById('usm').innerHTML=(exr[0]*1.3).toFixed(3); document.getElementById('ukf').innerHTML=(exr[0]*1.0).toFixed(3); document.getElementById('ukm').innerHTML=(exr[0]*14.14).toFixed(3); document.getElementById('chf').innerHTML=(exr[0]*1.63).toFixed(3); document.getElementById('chm').innerHTML=(exr[0]*1.63).toFixed(3); document.getElementById('thf').innerHTML=(exr[0]*1.26).toFixed(3); document.getElementById('thm').innerHTML=(exr[0]*1.26).toFixed(3); document.getElementById('caf').innerHTML=(exr[0]*0.68).toFixed(3); document.getElementById('cam').innerHTML=(exr[0]*0.68).toFixed(3); document.getElementById('skf').innerHTML=(exr[0]*5.5).toFixed(3); document.getElementById('skm').innerHTML=(exr[0]*5.7).toFixed(3); document.getElementById('auf').innerHTML=(exr[0]*1.6).toFixed(3); document.getElementById('aum').innerHTML=(exr[0]*10.28).toFixed(3); document.getElementById('inf').innerHTML=(exr[0]*2.76).toFixed(3); document.getElementById('inm').innerHTML=(exr[0]*3.94).toFixed(3); document.getElementById('spf').innerHTML=(exr[0]*1.64).toFixed(3); document.getElementById('spm').innerHTML=(exr[0]*17.54).toFixed(3); document.getElementById('brf').innerHTML=(exr[0]*2.11).toFixed(3); document.getElementById('brm').innerHTML=(exr[0]*17.29).toFixed(3); document.getElementById('jaf').innerHTML=(exr[0]*3.25).toFixed(3); document.getElementById('jam').innerHTML=(exr[0]*13.68).toFixed(3); document.getElementById('gef').innerHTML=(exr[0]*1.86).toFixed(3); document.getElementById('gem').innerHTML=(exr[0]*16.69).toFixed(3); document.getElementById('frf').innerHTML=(exr[0]*1.87).toFixed(3); document.getElementById('frm').innerHTML=(exr[0]*14.44).toFixed(3); document.getElementById('nzf').innerHTML=(exr[0]*2.07).toFixed(3); document.getElementById('nzm').innerHTML=(exr[0]*23.08).toFixed(3); document.getElementById('coin').innerHTML=exr[2]; } else if (exr[1]=="nodec") { document.getElementById('usf').innerHTML=(exr[0]*1.3).toFixed(1); document.getElementById('usm').innerHTML=(exr[0]*1.3).toFixed(1); document.getElementById('ukf').innerHTML=(exr[0]*1.0).toFixed(1); document.getElementById('ukm').innerHTML=(exr[0]*14.14).toFixed(1); document.getElementById('chf').innerHTML=(exr[0]*1.63).toFixed(1); document.getElementById('chm').innerHTML=(exr[0]*1.63).toFixed(1); document.getElementById('thf').innerHTML=(exr[0]*1.26).toFixed(1); document.getElementById('thm').innerHTML=(exr[0]*1.26).toFixed(1); document.getElementById('caf').innerHTML=(exr[0]*0.68).toFixed(1); document.getElementById('cam').innerHTML=(exr[0]*0.68).toFixed(1); document.getElementById('skf').innerHTML=(exr[0]*5.5).toFixed(1); document.getElementById('skm').innerHTML=(exr[0]*5.7).toFixed(1); document.getElementById('auf').innerHTML=(exr[0]*1.6).toFixed(1); document.getElementById('aum').innerHTML=(exr[0]*10.28).toFixed(1); document.getElementById('inf').innerHTML=(exr[0]*2.76).toFixed(1); document.getElementById('inm').innerHTML=(exr[0]*3.94).toFixed(1); document.getElementById('spf').innerHTML=(exr[0]*1.64).toFixed(1); document.getElementById('spm').innerHTML=(exr[0]*17.54).toFixed(1); document.getElementById('brf').innerHTML=(exr[0]*2.11).toFixed(1); document.getElementById('brm').innerHTML=(exr[0]*17.29).toFixed(1); document.getElementById('jaf').innerHTML=(exr[0]*3.25).toFixed(1); document.getElementById('jam').innerHTML=(exr[0]*13.68).toFixed(1); document.getElementById('gef').innerHTML=(exr[0]*1.86).toFixed(1); document.getElementById('gem').innerHTML=(exr[0]*16.69).toFixed(1); document.getElementById('frf').innerHTML=(exr[0]*1.87).toFixed(1); document.getElementById('frm').innerHTML=(exr[0]*14.44).toFixed(1); document.getElementById('nzf').innerHTML=(exr[0]*2.07).toFixed(1); document.getElementById('nzm').innerHTML=(exr[0]*23.08).toFixed(1); document.getElementById('coin').innerHTML=exr[2]; } else { document.getElementById('usf').innerHTML=(exr[0]*1.3).toFixed(2)+exr[1]; document.getElementById('usm').innerHTML=(exr[0]*1.3).toFixed(2)+exr[1]; document.getElementById('ukf').innerHTML=(exr[0]*1.0).toFixed(2)+exr[1]; document.getElementById('ukm').innerHTML=(exr[0]*14.14).toFixed(2)+exr[1]; document.getElementById('chf').innerHTML=(exr[0]*1.63).toFixed(2)+exr[1]; document.getElementById('chm').innerHTML=(exr[0]*1.63).toFixed(2)+exr[1]; document.getElementById('thf').innerHTML=(exr[0]*1.26).toFixed(2)+exr[1]; document.getElementById('thm').innerHTML=(exr[0]*1.26).toFixed(2)+exr[1]; document.getElementById('caf').innerHTML=(exr[0]*0.68).toFixed(2)+exr[1]; document.getElementById('cam').innerHTML=(exr[0]*0.68).toFixed(2)+exr[1]; document.getElementById('skf').innerHTML=(exr[0]*5.5).toFixed(2)+exr[1]; document.getElementById('skm').innerHTML=(exr[0]*5.7).toFixed(2)+exr[1]; document.getElementById('auf').innerHTML=(exr[0]*1.6).toFixed(2)+exr[1]; document.getElementById('aum').innerHTML=(exr[0]*10.28).toFixed(2)+exr[1]; document.getElementById('inf').innerHTML=(exr[0]*2.76).toFixed(2)+exr[1]; document.getElementById('inm').innerHTML=(exr[0]*3.94).toFixed(2)+exr[1]; document.getElementById('spf').innerHTML=(exr[0]*1.64).toFixed(2)+exr[1]; document.getElementById('spm').innerHTML=(exr[0]*17.54).toFixed(2)+exr[1]; document.getElementById('brf').innerHTML=(exr[0]*2.11).toFixed(2)+exr[1]; document.getElementById('brm').innerHTML=(exr[0]*17.29).toFixed(2)+exr[1]; document.getElementById('jaf').innerHTML=(exr[0]*3.25).toFixed(2)+exr[1]; document.getElementById('jam').innerHTML=(exr[0]*13.68).toFixed(2)+exr[1]; document.getElementById('gef').innerHTML=(exr[0]*1.86).toFixed(2)+exr[1]; document.getElementById('gem').innerHTML=(exr[0]*16.69).toFixed(2)+exr[1]; document.getElementById('frf').innerHTML=(exr[0]*1.87).toFixed(2)+exr[1]; document.getElementById('frm').innerHTML=(exr[0]*14.44).toFixed(2)+exr[1]; document.getElementById('nzf').innerHTML=(exr[0]*2.07).toFixed(2)+exr[1]; document.getElementById('nzm').innerHTML=(exr[0]*23.08).toFixed(2)+exr[1]; document.getElementById('coin').innerHTML=exr[2]; } } else { alert("There was a problem retrieving exchange rate. Please try again."); } } } req.open("GET", strURL, true); req.send(null); }}</script> As you can see, it's repetitive. I thought I could optimize to something like this. if (exr[1]=="") { var round = new toFixed(3); } else if (exr[1]=="nodec") { var round = new toFixed(1); } else { var round = new toFixed(2)+exr[1]; } document.getElementById('usf').innerHTML=(exr[0]*1.3).round; document.getElementById('usm').innerHTML=(exr[0]*1.3).round; document.getElementById('ukf').innerHTML=(exr[0]*1.0).round; document.getElementById('ukm').innerHTML=(exr[0]*14.14).round; document.getElementById('chf').innerHTML=(exr[0]*1.63).round; document.getElementById('chm').innerHTML=(exr[0]*1.63).round; document.getElementById('thf').innerHTML=(exr[0]*1.26).round; document.getElementById('thm').innerHTML=(exr[0]*1.26).round; document.getElementById('caf').innerHTML=(exr[0]*0.68).round; document.getElementById('cam').innerHTML=(exr[0]*0.68).round; document.getElementById('skf').innerHTML=(exr[0]*5.5).round; document.getElementById('skm').innerHTML=(exr[0]*5.7).round; document.getElementById('auf').innerHTML=(exr[0]*1.6).round; document.getElementById('aum').innerHTML=(exr[0]*10.28).round; document.getElementById('inf').innerHTML=(exr[0]*2.76).round; document.getElementById('inm').innerHTML=(exr[0]*3.94).round; document.getElementById('spf').innerHTML=(exr[0]*1.64).round; document.getElementById('spm').innerHTML=(exr[0]*17.54).round; document.getElementById('brf').innerHTML=(exr[0]*2.11).round; document.getElementById('brm').innerHTML=(exr[0]*17.29).round; document.getElementById('jaf').innerHTML=(exr[0]*3.25).round; document.getElementById('jam').innerHTML=(exr[0]*13.68).round; document.getElementById('gef').innerHTML=(exr[0]*1.86).round; document.getElementById('gem').innerHTML=(exr[0]*16.69).round; document.getElementById('frf').innerHTML=(exr[0]*1.87).round; document.getElementById('frm').innerHTML=(exr[0]*14.44).round; document.getElementById('nzf').innerHTML=(exr[0]*2.07).round; document.getElementById('nzm').innerHTML=(exr[0]*23.08).round; document.getElementById('coin').innerHTML=exr[2]; } But this doesn't work and I think it's not a right coding in Javascript.Could anyone give me some hints?Thank you. Link to comment Share on other sites More sharing options...
jeffman Posted December 15, 2010 Share Posted December 15, 2010 Try this. Create an object something like this: var rates = new Object();rates['usf'] = 1.3;rates['usm'] = 1.3;rates['ukf'] = 1.0;// on and on till you assign all the values. The reason for doing that is to improve access to the data. Your way, we have to hard-code it over and over. This way, we code it once and forget about it. An object structure also gives us something we can loop through, and loops are one of the first things to look for when optimizing code.Now, let's use your original conditionals to set some values var myDecimal;var myIncrement = 0;if (exr[1] == "") { myDecimal = 3;}else if (exr[1] == "nodec") { myDecimal = 1;}else { myDecimal = 2; myIncrement = exr[1];} Finally, we'll loop through this thing. But notice how we replace hard-coded values with variables, and how we only need to loop once: for (var i in rates) { document.getElementById(i).innerHTML = (exr[0] * rates[i]).toFixed(myDecimal) + myIncrement;}document.getElementById('coin').innerHTML = exr[2]; // it's the same always, right? I haven't actually run this, but it should be pretty close. Maybe I left out something. I don't know what exr[1] actually is, so I don't know if it needs to be cast or not. The point is, don't copy/paste and hope it works off the shelf. Link to comment Share on other sites More sharing options...
hotdog1983 Posted December 15, 2010 Author Share Posted December 15, 2010 OH MY GOD!!!!That is a brilliant code. It worked PERFECTLY after I changed var myIncrement = 0; to var myIncrement = "";I've been trying to solve this since yesterday and you've just made my day!!Thanks a lot, wish you a happy holiday season!! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.