With the following model structure:
prods: [{
code: 'ABC123',
name: 'Product 1',
variants[{
code: 'V123',
name 'Var 1'
}, {
code: 'V456',
name 'Var 2'
}, {
code: 'V789',
name 'Var 3'
}
]
}, {
code: 'DEF456',
name: 'Product 2',
variants[{
code: 'V098',
name 'Var 4'
}, {
code: 'V123',
name 'Var 1'
}, {
code: 'V123',
name 'Var 1'
}
]
}, {
code: 'XYZ123',
name: 'Product 3',
variants[{
code: 'V123',
name 'Var 1'
}, {
code: 'V456',
name 'Var 2'
}, {
code: 'V789',
name 'Var 3'
}
]
}
]
Is it possible to get an array of the unique variant codes, so would expect output to give me:
[{code:'V123'},{code: 'V456'}, {code: 'V789'},{code: 'V098'}]
You can chain together map(), flatten(), and uniqBy():
_(prods)
.map('variants')
.flatten()
.uniqBy('code')
.map(i => _.pick(i, 'code'))
.value();
The second map()
call isn't strictly necessary - it's just to get rid of the name
property to match your requested output.