I wrote this Javascript code.
function updateCost(plotcode) {
if (plotcode == "KKPP") {
alert("Fully Invalid!!!");
KKPP();
} else if (plotcode == 1) {
var pValue = parseInt(localStorage.plot1);
var opValue = 2 * pValue;
var mval = 760;
if (opValue >= mval) {
var opValue = mval;
}
var k = (localStorage.plot1 = opValue - 10);
} else if (plotcode == 2) {
var pValue = parseInt(localStorage.plot2);
var opValue = 2 * pValue;
var mval = 760;
if (opValue >= mval) {
var opValue = mval;
}
var k = (localStorage.plot2 = opValue - 10);
} else if (plotcode == 3) {
var pValue = parseInt(localStorage.plot3);
var opValue = 2 * pValue;
var mval = 820;
if (opValue >= mval) {
var opValue = mval;
}
var k = (localStorage.plot3 = opValue - 20);
} else {
alert("Invalid Plot Code");
KKPP();
}
alert("Rent of Plot " + plotcode + " is updated to " + k);
addtoHistory("Plot " + plotcode, "Rent Updated to " + k);
}
This code is very long.
As you can see the code is repeating in this format
} else if (plotcode == 7) {
var pValue = parseInt(localStorage.plot7);
var opValue = 2 * pValue;
var mval = 940;
if (opValue >= mval) {
var opValue = mval;
}
var k = (localStorage.plot7 = opValue - 40);
again and again
How can I put this inside a loop, or is there anything else that I can do to make this short?
Hmmm, I suggest you to store the valid plotcodes and their data in an array. You need some hardcoded values.
conts PLOTCODE_DATAS = [{plotcode: 1, mval: 760, substrahend: 10 }, ...];
Now you can easily use find or a for loop.
function updateCost(plotcode) {
if (plotcode == "KKPP") {
alert("Fully Invalid!!!");
KKPP();
return;
}
const plotcodeData = PLOTCODE_DATAS.find(d => d.plotcode === plotcode);
if(!plotcodeData) {
alert("Invalid Plot Code");
KKPP();
}
const pValue = parseInt(localStorage["plot" + plotcode]);
let opValue = 2 * pValue;
if (opValue >= plotcodeData.mval) {
opValue = plotcodeData.mval;
}
const k = (localStorage["plot" + plotcode]= opValue - plotcodeData.substrahend);
alert("Rent of Plot " + plotcode + " is updated to " + k);
addtoHistory("Plot " + plotcode, "Rent Updated to " + k);
}
function updateCost(plotcode) {
if (plotcode == "KKPP") {
alert("Fully Invalid!!!");
KKPP();
return;
}
for(let plotcodeData of PLOTCODE_DATAS) {
if(plotcodeData.plotcode === plotcode) {
const pValue = parseInt(localStorage["plot" + plotcode]);
let opValue = 2 * pValue;
if (opValue >= plotcodeData.mval) {
opValue = plotcodeData.mval;
}
const k = (localStorage["plot" + plotcode]= opValue - plotcodeData.substrahend);
alert("Rent of Plot " + plotcode + " is updated to " + k);
addtoHistory("Plot " + plotcode, "Rent Updated to " + k);
return;
}
}
alert("Invalid Plot Code");
KKPP();
}
Your data can look even like this:
conts PLOTCODE_DATAS = new Map([[1, {mval: 760, substrahend: 10}], ...]);
...
const plotcodeData = PLOTCODE_DATAS.get(plotcode);
conts PLOTCODE_DATAS = [[1, 760, 10], ...]);
...
const plotcodeData = PLOTCODE_DATAS.find(d => d[0] === plotcode);
// OR
for(let plotcodeData of PLOTCODE_DATAS) {
if(plotcodeData[0] === plotcode) { ...
But I don't recommend thit one.
Try it like this:
function cost(i, mval){
var pValue = parseInt(localStorage["plot" + i]);
var opValue = 2 * pValue;
if (opValue >= mval) {
var opValue = mval;
}
var k = (localStorage["plot" + i] = opValue - 20);
}