Say, I have array of objects:
arr = [
{path: 'mexico', name: 'mexico'},
{path: 'brazil', name: 'brazil'},
{path: 'netherlands', name: 'netherlands'}
];
What I want to achieve:
prefix = 'country/'
arr = [
{path: 'country/mexico', name: 'mexico'},
{path: 'country/brazil', name: 'brazil'},
{path: 'country/netherlands', name: 'netherlands'}
];
Is there a one liner javascript function that append the prefix country/ into the path property of all objects in the array?
perhaps, something like this: arr.append(prefix, arr, 'path');
As mdn says about map() function:
The map() method creates a new array populated with the results of calling a provided function on every element in the calling array.
So the code would be looked like that:
arr = arr.map(s => ({...s, path: 'country/' + s.path}))
An example:
let arr = [
{path: 'mexico', name: 'mexico'},
{path: 'brazil', name: 'brazil'},
{path: 'netherlands', name: 'netherlands'}
];
arr = arr.map(s => ({...s, path: 'country/' + s.path}))
console.log(arr)
You could use a forEach and a concat:
arr = [
{path: 'mexico', name: 'mexico'},
{path: 'brazil', name: 'brazil'},
{path: 'netherlands', name: 'netherlands'}
];
prefix = 'country/';
arr.forEach(x => x.path = prefix.concat(x.path));
console.log(arr);
EDIT:
Following what @MaikLowrey suggested on comment and reading this answer, + operator to concat strings has better performance and memory allocation compared to concat operator.
So the optimized solution is:
arr = [
{path: 'mexico', name: 'mexico'},
{path: 'brazil', name: 'brazil'},
{path: 'netherlands', name: 'netherlands'}
];
prefix = 'country/';
arr.forEach(x => x.path = prefix + x.path);
console.log(arr);
arr = [
{path: 'mexico', name: 'mexico'},
{path: 'brazil', name: 'brazil'},
{path: 'netherlands', name: 'netherlands'}
];
prefix = "country/"
arr.forEach(entry => entry.path = prefix + entry.path)
console.log(arr)