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
CodePudding user response:
Use a for
loop, and increment it by 2 every iteration:
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];
const res = [];
for (let i = 0; i 1 < arrayInput.length; i = 2) {
res.push(arrayInput[i] ';' arrayInput[i 1]);
}
console.log(res);
CodePudding user response:
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)
CodePudding user response:
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)
CodePudding user response:
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'];