Chaining functions: what am I miss?

Viewed 41

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?

0 Answers
Related