Reputation: 2631
How to filter items by type?
const items = {
'someHash0': {
type: 'foo',
name: 'a'
},
'someHash1': {
type: 'foo',
name: 'b'
},
'someHash2': {
type: 'foo',
name: 'c'
},
'someHash3': {
type: 'baz',
name: 'd'
},
};
I want to filter by type=foo and get that result:
const items = {
'someHash0': {
type: 'foo',
name: 'a'
},
'someHash1': {
type: 'foo',
name: 'b'
},
'someHash2': {
type: 'foo',
name: 'c'
}
};
I tryied with
return _.mapValues(pairs, function (item) {
return (item.type === 'foo') ?? item
})
but it returns true/false instead of the whole object
Upvotes: 2
Views: 134
Reputation: 852
map
in general is for editing iterated inputs, so it's not what you need.
You can do like this:
let result = _.filter(items, x => x.type === 'foo')
If you need to keep the same keys you could do it like this :
let result = _.pickBy(items, x => x.type === 'foo')
Upvotes: 3
Reputation: 1010
A filter would be enough if you didn't need to re-add the numbering. In that case, you can still get away rather easily by combining reduce
and filter
, as follow:
const items = {
'0': {
type: 'foo',
name: 'a'
},
'1': {
type: 'foo',
name: 'b'
},
'2': {
type: 'foo',
name: 'c'
},
'3': {
type: 'baz',
name: 'd'
},
};
const mapped = _.reduce(_.filter(items, (item) => item.type === 'foo'), (acc, item, index) => {
acc[index] = item
return acc
}, {})
console.log(mapped)
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
Upvotes: 0