我尝试有条件地在我的reducer中进行连接,我有一个数组对象,并且仅当我的reducer中不存在值时才想连接。
如果价值存在,那么什么都不会发生。
我使用lodash并尝试使用_.uniqBy像这样:

_.uniqBy(arr1.concat(val1), 'id');


这是行不通的。

我的减速机的例子

const arr1 = [{id:1, name:'alex'}, {id:2, name:'taylor'}]
const val1 = {id:1, name:'alex'};

const reducer = {
    finalArr: arr1.concat(val1)
}

console.log('Reducer', reducer)


jsFiddle linkk

所需输出:

[{id:1, name:'alex'}, {id:2, name:'taylor'}]


因为val1({id:1,name:'alex'})已存在于数组中。

最佳答案

连接数组,并使用_.uniqBy()删除重复项可以正常工作。

例:



const arr1 = [{id:1, name:'alex'}, {id:2, name:'taylor'}]
const val1 = {id:1, name:'alex'};

const result = _.uniqBy(arr1.concat(val1), 'id');

console.log('Reducer', result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>





但是,最好使用_.unionBy()从所有给定数组中依次创建一个唯一值数组:



const arr1 = [{id:1, name:'alex'}, {id:2, name:'taylor'}]
const val1 = {id:1, name:'alex'};

const result = _.unionBy(arr1, val1, 'id');

console.log('Reducer', result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

09-26 19:26
查看更多