I have an array of objects and I need a way to allow the user to select which properties they want to import in the database. Is there a way to map and create a separate array only with the properties the user actually wants to send insert.
For example, if we have the following array:
JavaScript
x
7
1
[
2
{name: 'name1', address: 'addr1', phone: '123'},
3
{name: 'name2', address: 'addr1', phone: '123'},
4
{name: 'name3', address: 'addr1', phone: '123'},
5
{name: 'name4', address: 'addr1', phone: '123'},
6
]
7
and the user selects name and phone only, then the array that is sent to be added in the database should look like this:
JavaScript
1
7
1
[
2
{name: 'name1', phone: '123'},
3
{name: 'name2', phone: '123'},
4
{name: 'name3', phone: '123'},
5
{name: 'name4', phone: '123'},
6
]
7
How can this be achieved?
Advertisement
Answer
Use map and return the new object
JavaScript
1
9
1
const arr = [
2
{name: 'name1', address: 'addr1', phone: '123'},
3
{name: 'name2', address: 'addr1', phone: '123'},
4
{name: 'name3', address: 'addr1', phone: '123'},
5
{name: 'name4', address: 'addr1', phone: '123'},
6
];
7
8
const res = arr.map(({name, phone}) => ({name, phone}));
9
console.log(res);
If you want to make it dynamic with an array of props to copy over
JavaScript
1
12
12
1
const arr = [
2
{name: 'name1', address: 'addr1', phone: '123'},
3
{name: 'name2', address: 'addr1', phone: '123'},
4
{name: 'name3', address: 'addr1', phone: '123'},
5
{name: 'name4', address: 'addr1', phone: '123'},
6
];
7
8
const copy = ['name', 'phone'];
9
10
const res = arr.map(data => copy.reduce((o, k) => (o[k] = data[k], o), {}));
11
12
console.log(res);