I would like to know how can I merge arrays in this way e.g.:
const names = ['MARCUS', 'LUCAS', 'ANDREA']
const surnames = ['SMITH', 'JOHNSON', 'WILLIAMS']
[...merge stuff]
// and then the output should be
const full_names = ['MARCUS SMITH', 'LUCAS JOHNSON', 'ANDREA WILLIAMS']
CodePudding user response:
These are couple of ways to do it. Assumption is that there is 1:1 matching of name and surname in the two input arrays.
const names = ['MARCUS', 'LUCAS', 'ANDREA']
const surnames = ['SMITH', 'JOHNSON', 'WILLIAMS']
// way 1: traditional loop
const res = [];
for (let i = 0; i < names.length; i ) {
res.push(`${names[i]} ${surnames[i]}`);
};
console.log('full_names: ', res);
// way 2: another way - more functional flavor
const res2 = names.reduce((acc, e, i) => {
acc.push(`${e} ${surnames[i]}`);
return acc;
}, [])
console.log('full_names: ', res2);
output:
[ 'MARCUS SMITH', 'LUCAS JOHNSON', 'ANDREA WILLIAMS' ]
CodePudding user response:
Here a zip function creates an array like [["MARCUS","SMITH"],["LUCAS","JOHNSON"],["ANDREA","WILLIAMS"]]
and then map converts the inner arrays to strings.
const names = ['MARCUS', 'LUCAS', 'ANDREA'];
const surnames = ['SMITH', 'JOHNSON', 'WILLIAMS'];
const zip = (...arrays) => {
let res = [];
for(let i = 0; i < arrays[0].length; i ) {
res.push([]);
for(let j = 0; j < arrays.length; j ) {
res[i].push(arrays[j][i]);
}
}
return res;
};
const res = zip(names, surnames)
.map(([name, surname]) => name ' ' surname);
console.log(res);
CodePudding user response:
You can do it like:
const names = ['MARCUS', 'LUCAS', 'ANDREA']
const surnames = ['SMITH', 'JOHNSON', 'WILLIAMS']
const result = names.map((n, i) => `${n} ${surnames[i]}`)
document.getElementById('app').innerText = JSON.stringify(result)
<pre id="app"></pre>
CodePudding user response:
You can use recursion as follows:
const names = ['MARCUS', 'LUCAS', 'ANDREA'],
surnames = ['SMITH', 'JOHNSON', 'WILLIAMS'],
fn = (n,sn,i,f) =>
i <= n.length - 1 ?
fn(n,sn,i 1,[...f,`${n[i]} ${sn[i]}`]) :
f;
console.log( fn(names,surnames,0,[]) );