I want a nice small one liner to use an array, for example ['postcode','town'], and then pluck just these properties from a larger object.
So this:
const fields = ['postcode','town'];
const obj = {
name: 'test',
postcode: 'SS2 5JJ',
town: 'Somewhere',
other: 'info'
}
Would become this:
const filtered = {
postcode: 'SS2 5JJ',
town: 'Somewhere',
}
I did find this however I have mis-understood it I believe:
const fields = ['postcode','town'];
Object.keys(fields).map(e => fields[e])
What is the best way to do this?
You could use Array.reduce
const fields = ['postcode', 'town'];
const obj = {
name: 'test',
postcode: 'SS2 5JJ',
town: 'Somewhere',
other: 'info'
};
const filteredObj = fields.reduce((acc, cur) => Object.assign(acc, { [cur]: obj[cur] }), {});
console.log(filteredObj);
You can map your array fields to [key, value] which will create an array of [key, value] pairs. Once you have this array, you can use Object.fromEntries() to build your object for each key-value pair:
const fields = ['postcode','town'];
const obj = { name: 'test', postcode: 'SS2 5JJ', town: 'Somewhere', other: 'info' };
const res = Object.fromEntries(fields.map(key => [key, obj[key]]));
console.log(res);
"Best" is of course a subjective concept. But I think that the reduce function is the cleanest way of doing it. That way there is no need to chain together different functions.
const filtered = fields.reduce((prev, key) => ({[key]: obj[key], ...prev}), {});