I try to conditionally concat in my reducer, I have an array objects and I want to concatenate only if value not exist in my reducer.
If value exists nothing must happen.
I use lodash and I tried with _.uniqBy
like this :
JavaScript
x
2
1
_.uniqBy(arr1.concat(val1), 'id');
2
This does not work.
Example of my reducer
JavaScript
1
9
1
const arr1 = [{id:1, name:'alex'}, {id:2, name:'taylor'}]
2
const val1 = {id:1, name:'alex'};
3
4
const reducer = {
5
finalArr: arr1.concat(val1)
6
}
7
8
console.log('Reducer', reducer)
9
Required output :
JavaScript
1
2
1
[{id:1, name:'alex'}, {id:2, name:'taylor'}]
2
Because val1 ({id:1, name:’alex’}) already exists in the array.
Advertisement
Answer
Concatenating the arrays, and removing duplicates using _.uniqBy()
works fine.
Example:
JavaScript
1
6
1
const arr1 = [{id:1, name:'alex'}, {id:2, name:'taylor'}]
2
const val1 = {id:1, name:'alex'};
3
4
const result = _.uniqBy(arr1.concat(val1), 'id');
5
6
console.log('Reducer', result);
JavaScript
1
1
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
However, it’s better to use _.unionBy()
which creates an array of unique values, in order, from all given arrays:
JavaScript
1
6
1
const arr1 = [{id:1, name:'alex'}, {id:2, name:'taylor'}]
2
const val1 = {id:1, name:'alex'};
3
4
const result = _.unionBy(arr1, val1, 'id');
5
6
console.log('Reducer', result);
JavaScript
1
1
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>