Reputation: 151
I have an array of Objects as shown below:
people = [
{id: "1", name: "abc", gender: "m", age:"15" },
{id: "2", name: "a", gender: "m", age:"25" },
{id: "3", name: "efg", gender: "f", age:"5" },
{id: "4", name: "hjk", gender: "m", age:"35" },
{id: "5", name: "ikly", gender: "m", age:"41" },
{id: "6", name: "ert", gender: "f", age:" 30" },
{id: "7", name: "qwe", gender: "f", age:" 31" },
{id: "8", name: "bdd", gender: "m", age:" 78" },
]
And I have another array containing the values I want from the object:
filter = ['name','age']
I want to filter the array of people to return an array of objects that contains only values in that filter. So the Output should look like this:
people = [
{ name: "abc", age:"15" },
{ name: "a", age:"25" },
{ name: "efg", age:"5" },
{ name: "hjk", age:"35" },
{ name: "ikly", age:"41" },
{ name: "ert", age:" 30" },
{ name: "qwe", age:" 31" },
{ name: "bdd", age:" 78" },
]
This is similar to the question here: filtering an array of objects based on another array in javascript
Upvotes: 3
Views: 126
Reputation: 454
Map method can resolve your issue.
const people = [
{id: "1", name: "abc", gender: "m", age:"15" },
{id: "2", name: "a", gender: "m", age:"25" },
{id: "3", name: "efg", gender: "f", age:"5" },
{id: "4", name: "hjk", gender: "m", age:"35" },
{id: "5", name: "ikly", gender: "m", age:"41" },
{id: "6", name: "ert", gender: "f", age:" 30" },
{id: "7", name: "qwe", gender: "f", age:" 31" },
{id: "8", name: "bdd", gender: "m", age:" 78" },
];
const result = people.map(person => {
return {
name: person.name,
age: person.age
}
})
console.log(result);
Upvotes: -1
Reputation: 38209
We can create entries
by Object.entries
, then filter our object by filter
array using filter
method and then just map
desired elements which can be created by Object.fromEntries
:
people = people.map(s => ({ ...Object.fromEntries(Object.entries(s)
.filter(([k, v]) => filter.some(f => f == k)))}));
let people = [
{id: "1", name: "abc", gender: "m", age:"15" },
{id: "2", name: "a", gender: "m", age:"25" },
{id: "3", name: "efg", gender: "f", age:"5" },
{id: "4", name: "hjk", gender: "m", age:"35" },
{id: "5", name: "ikly", gender: "m", age:"41" },
{id: "6", name: "ert", gender: "f", age:" 30" },
{id: "7", name: "qwe", gender: "f", age:" 31" },
{id: "8", name: "bdd", gender: "m", age:" 78" },
];
let filter = ['name','age'];
people = people.map(s => ({ ...Object.fromEntries(Object.entries(s)
.filter(([k, v]) => filter.some(f => f ==k)))}));
console.log(people);
Upvotes: 0
Reputation: 386868
You could map the object and take the keys for new entries.
var people = [{ id: "1", name: "abc", gender: "m", age: "15" }, { id: "2", name: "a", gender: "m", age: "25" }, { id: "3", name: "efg", gender: "f", age: "5" }, { id: "4", name: "hjk", gender: "m", age: "35" }, { id: "5", name: "ikly", gender: "m", age: "41" }, { id: "6", name: "ert", gender: "f", age: " 30" }, { id: "7", name: "qwe", gender: "f", age: " 31" }, { id: "8", name: "bdd", gender: "m", age: " 78" }],
keys = ['name', 'age'],
result = people.map(o => Object.fromEntries(keys.map(k => [k, o[k]])));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 2
Reputation: 6006
One way is to use map
with reduce
:
const result = people.map(item => filter.reduce((acc, cur) => {
acc[cur] = item[cur];
return acc;
}, {}))
Upvotes: 0