1

This may be a duplicate question. But I didn't find any similar questions in this forum.

I'm trying to modify values in an array to different format.

arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];

arrayOutput= ['A;B', 'C;D', 'E;F'];

I got the solution with the following approach

let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F']
arrayOutput = [arrayInput[0]+';'+ arrayInput[1], arrayInput[2]+';'+ arrayInput[3]];
if (arrayInput[4]) {
     let val = arrayInput[4] + (arrayInput[5] ? ';'+arrayInput[5] : '');
     arrayOutput.push(val);
}
console.log(arrayOutput);

But I am looking for a generic solution such that even if I have more items in array, it should generate the output in desired format.

['A', 'B', 'C', 'D', 'E', 'F', 'G'] ==> ['A;B', 'C;D', 'E;F', 'G']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] ==> ['A;B', 'C;D', 'E;F', 'G;H']

Thanks for the support

4 Answers 4

2

You can use Array#reduce as in the following demo. Just in case there's an odd number of elements, I have included a test here ${arr[i+1] ? ";" + arr[i+1] : ""}; otherwise use ${arr[i+1]}, if you always have an even number of elements.

const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'],
      arrayOutput = arrayInput.reduce(
          (acc,cur,i,arr) => 
          i % 2 === 0 ? 
              [...acc,`${cur}${arr[i+1] ? ";" + arr[i+1] : ""}`] : 
              acc,
          []
      );

console.log( arrayOutput );
//OUTPUT: ['A;B', 'C;D', 'E;F'];

Sign up to request clarification or add additional context in comments.

Comments

2

Use a for loop, and increment it by 2 every iteration:

const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];

const res = [];
for (let i = 0; i < arrayInput.length; i += 2) {
  const part1 = arrayInput[i];
  const part2 = arrayInput[i + 1];
  if (part1) {
    res.push(part1 + (part2 ? (';' + part2) : ''));
  }
}
console.log(res);

2 Comments

Thank you @Omri for the answer. but this solution is not working if odd number of elements present in array.
@ArunG you're right! edited my answer so it will work
1

You can try something like this (implementation based on array reduce and join):

const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];

let temp = [];

const output = arrayInput.reduce((accumulator, item) => {
  if (temp.length < 2) {
    temp.push(item);
  } else {
    accumulator.push(temp.join(';'));
    temp = [];
  }
  return accumulator;
}, []);

console.log(output)

Comments

1

Using a foreach :

let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F','G','H','I']
let newArray = [];

arrayInput.forEach((e,i) => {
  if((i + 1)%2==0)
  {
    newArray[newArray.length -1] = `${newArray[newArray.length -1]};${e}`
  }
  else
  {    
    newArray.push((i + 1) < newArray.length ? `${e};` : e)
  }
});

console.log(newArray)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.