我有这个功能,效果很好,删除了重复的电子邮件。
contacts.filter((v,i,a)=>a.findIndex(v2=>(v2.email===v.email))===i);
但它似乎删除了带有空电子邮件字符串的对象,但我想保留这些对象。只应删除与电子邮件匹配的电子邮件
var arr = [
{
name: '1',
city: 'lagos',
email: 'second@gmail.com',
},
{
name: '2',
city: 'abuja',
email: 'second@gmail.com',
},
{
name: '3',
city: 'ibadan',
email: '',
},
{
name: '4',
city: 'kano',
email: '',
},
];
从上面的数组中,我想从 1 和 2 中删除重复项,同时保留 2 和 3。
_.uniqBy()
对数组进行去重。在谓词函数中,为空字符串返回电子邮件或 Symbol
,因为符号始终是唯一的:
const arr = [{"name":"1","city":"lagos","email":"second@gmail.com"},{"name":"2","city":"abuja","email":"second@gmail.com"},{"name":"3","city":"ibadan","email":""},{"name":"4","city":"kano","email":""}];
const result = _.uniqBy(arr, o => o.email || Symbol());
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
改变
contacts.filter((v,i,a)=>a.findIndex(v2=>(v2.email===v.email))===i);
到
contacts.filter((v,i,a)=>
v.email==="" ||
a.findIndex(v2=>(v2.email===v.email))===i
);
这样一来,您就可以保持原来的功能按原样工作,并且只需添加保持
email:""
案例的能力即可。