I have an array of objects that I need to turn into a new single object.
This is structure of array:
class QueryFilter {
filterName;
filterValue;
}
let filter1 = new QueryFilter();
filter1.filterName = "SpamScore";
filter1.filterValue = 5;
let filter2 = new QueryFilter();
filter2.filterName = "Pages";
filter2.filterValue = 50;
let filters = [filter1, filter2];
I need to turn filters into an object like this:
let newObj = {
SpamScore: 5,
Pages: 50
};
I have been trying with map and assign but I cant figure out the way I am supposed to do this. Does this require reflection of some type or is there a simple way?
asked Jul 13, 2018 at 4:51
Guerrilla
15.1k39 gold badges127 silver badges242 bronze badges
3 Answers 3
You can do it using Array#reduce:
filters.reduce((r, i) => {
r[i.filterName] = i.filterValue;
return r;
}, {});
The idea is to loop over the filters object, and in each iteration, assign the key-value to the result.
answered Jul 13, 2018 at 4:53
31piy
23.9k6 gold badges51 silver badges69 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
A simple reduce into an object would do it:
class QueryFilter {
}
let filter1 = new QueryFilter();
filter1.filterName = "SpamScore";
filter1.filterValue = 5;
let filter2 = new QueryFilter();
filter2.filterName = "Pages";
filter2.filterValue = 50;
let filters = [filter1, filter2];
console.log(
filters.reduce((a, { filterName, filterValue }) => (
Object.assign(a, { [filterName]: filterValue })
), {})
);
answered Jul 13, 2018 at 4:55
CertainPerformance
374k55 gold badges354 silver badges359 bronze badges
1 Comment
Guerrilla
Ahh thanks. Funnily that method didn't come up when i was googling, thank you very much i will accept when timer allows
let newObj = {}
filters.forEach(x=> {
newObj[x.filterName] = x.filterValue;
})
console.log(newObj)
Alternatively you can also use Array#forEach to achieve what you want
answered Jul 13, 2018 at 5:57
Isaac
13k18 gold badges66 silver badges135 bronze badges
Comments
lang-js
for(let filter of filters) { newObj[filter.filterName] = filter.filterValue }object.propertylet newObj = {}; for(let f of filters) { newObj[f.filterName] = f.filterValue }