The goal is implement functions addLink(), removeLink(), reverseChain() and finishChain().
The code:
const errMsg = "You can't remove incorrect link!";
// check if position to remove is normal int
function isInt(value) {
return (
!isNaN(value) &&
parseInt(Number(value)) === value &&
!isNaN(parseInt(value, 10))
);
}
let resArr = [];
let tmpArr = [];
let resString = "";
const chainMaker = {
addLink(value) {
if (value === null) {
value = "null";
}
if (!value) {
resArr.push(` ( ) `);
return this;
} else {
resArr.push(` (${value.toString()}) `);
return this;
}
},
removeLink(position) {
if (
!isInt(position) ||
isNaN(position) ||
!position ||
position < 0 ||
position > chainMaker.getLength()
) {
throw new Error(errMsg);
}
tmpArr = [...resArr];
tmpArr[position] = "del";
resArr = []; //reassembling the array with no exc. link
tmpArr.forEach((elDel) => {
if (elDel !== "del") {
resArr.push(elDel);
}
});
},
reverseChain() {
resArr.reverse();
},
finishChain() {
let tmp = [...resArr]
resString = tmp.join("~~");
return resString;
}
};
It works fine when i doin smth like:
chainMaker.addLink('str').addLink(55).addLink(null).addLink('whatever').reverseChain()
or
chainMaker.addLink('str').addLink(55).addLink(null).addLink('whatever').removeLink(2)
But when I try to add .finishChain() it falls into "TypeError: Cannot read properties of undefined (reading 'finishChain')"
At the same time, if I split call to:
chainMaker.addLink('str').addLink(55).reverseChain();
chainMaker.removeLink(2);
chainMaker.finishchain();
It works again. What did I miss?