'How to flip every character with the character next to it. Javascript

Need help inside the for loop to flip each character with the character before it.

function flip(str) {
  //split string


//iterate through split string


//return joined string

var splitt = str.split('');

for(var i = 0; i < splitt.length; i++){
    //flip every character with one before it
 }
}

var output = flip('otatl');
console.log(output); // -> 'total'


Solution 1:[1]

function split(str) {
  let splitt = str.split('');
  for (let i=0; i<splitt.length-1; i+=2) {
    const temp = splitt[i];
    splitt[i] = splitt[i+1];
    splitt[i+1] = temp;
  }
  return splitt.join('');
}

Solution 2:[2]

You can use ES6 destructuring assignment.

function flip(str) {
  //split string
  //iterate through split string
  //return joined string
  let splitt = str.split('');

  for (let i=0; i < splitt.length; i++){
    //flip every character with one before it
    if (i%2 == 1) {
      [splitt[i-1], splitt[i]] = [splitt[i], splitt[i-1]];
    }
  }

  return splitt.join('');
}

let output = flip('otatl');
console.log(output); // -> 'total'

You can combine this technique with gillyb's loop pattern to reduce the iterations as follows:

function flip(str) {
  //split string
  //iterate through split string
  //return joined string
  let splitt = str.split('');

  for (let i=1; i < splitt.length; i+=2){
    //flip every character with one before it
    [splitt[i-1], splitt[i]] = [splitt[i], splitt[i-1]];
  }

  return splitt.join('');
}

let output = flip('otatl');
console.log(output); // -> 'total'

Solution 3:[3]

Can do something similar with regex and array manipulation

const flip = (stringToFlip) => stringToFlip
  .split(/(.{2})/)           // array of strings of 2 chars
  .map((e) => e.split('')    // convert each string piece to array
    .reverse()               // reverse array 
    .join('')                // convert array piece back to string
  )
  .join('');                 // combine all parts

const result = flip('otatl');
console.log("flip('otatl')");
console.log(result);

Solution 4:[4]

If we're not restricted to for loops, this is my (slightly too code golf-ish?) answer:

const flip = (str) =>
  str
    .split('')
    .reduce((a, v, i) => (a[i + ((i % 2) * -2 + 1)] = v, a), [])
    .join('');

console.log(flip('otatl'));
console.log(flip('lfpi'));

Solution 5:[5]

I'm sorry I am late to the party but you can use reduce().

let input = "vanjskojfdghpja";

let output = input
  .split('')
  .reduce(([o,p],c,i) => i%2?[o+c+p,'']:[o,c],['',''])
  .join('');

console.log(output);
.as-console-wrapper { top: 0; max-height: 100% !important; }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 gillyb
Solution 2
Solution 3 mc.
Solution 4 Ben Stephens
Solution 5