javascriptstringcharacter

How to get odd and even position characters from a string?


I'm trying to figure out how to remove every second character (starting from the first one) from a string in Javascript. For example, the string "This is a test!" should become "hsi etTi sats!" I also want to save every deleted character into another array.

I have tried using replace method and splice method, but wasn't able to get them to work properly. Mostly because replace only replaces the first character.

function encrypt(text, n) {
  if (text === "NULL") return n;
  if (n <= 0) return text;
  var encArr = [];
  var newString = text.split("");
  var j = 0;
  for (var i = 0; i < text.length; i += 2) {
    encArr[j++] = text[i];
    newString.splice(i, 1); // this line doesn't work properly
  }
}

Solution

  • It would probably be easier to use a regular expression and .replace: capture two characters in separate capturing groups, add the first character to a string, and replace with the second character. Then, you'll have first half of the output you need in one string, and the second in another: just concatenate them together and return:

    function encrypt(text) {
      let removedText = '';
      const replacedText1 = text.replace(/(.)(.)?/g, (_, firstChar, secondChar) => {
        // in case the match was at the end of the string,
        // and the string has an odd number of characters:
        if (!secondChar) secondChar = '';
        // remove the firstChar from the string, while adding it to removedText:
        removedText += firstChar;
        return secondChar;
      });
      return replacedText1 + removedText;
    }
    console.log(encrypt('This is a test!'));