js数组去重:过滤掉key对应的value值已经存在的数据
七娃博客411人阅读
场景分析
实际开发中遇到这样一个场景问题:要求反显出所有的产品名字,但是产品名字不能重复出现。
一看标题明显的就是考察的是 数组去重!不过不一样的是,不是判断数组中的值全部一样,而是判断对象中其中一个key重复,就会过滤掉此列数据。
原理懂了,先造个数组:
let arr = [{id:0,name:"李四"}, {id:1,name:"李二"}, {id:2,name:"李四"}];
数组中第三列和第一列的名字重复,去掉第三列数据,这样就解决这个问题了。那么说一下常用的数组去重的方法:
//方法一 let aa = Array.from(new Set(arr)) //方法二 let cc =[...new Set(arr)] ...
仔细回顾了一下,发现好像不能直接过滤出我们想要的数据,what fuck! 那就只能手动造轮子了。
首先这个问题,需要循环新数组中的key对应的value值是否重复,又要循环老数组中的值,那么肯定要双重for循环嵌套了。
function filterArr(arr){ let resultArr = [],i,j; for (i = 0; i < arr.length; i++) { for (j = 0; j < resultArr.length; j++) { if (resultArr[j].name == arr[i].name) { break; } } if (j == resultArr.length) { resultArr[resultArr.length] = arr[i]; } } return resultArr; }
这样就循环过滤出我们想要的结果,不过有人会发现亮点:判断了j和新数组长度相等的情况下直接赋值了,大家可以考虑一下什么情况下两者会相等?没有这句话会不会成功?
评论 | 0 条评论
登录之后才可留言,前往登录