场景分析

实际开发中遇到这样一个场景问题:要求反显出所有的产品名字,但是产品名字不能重复出现。
一看标题明显的就是考察的是 数组去重!不过不一样的是,不是判断数组中的值全部一样,而是判断对象中其中一个key重复,就会过滤掉此列数据。
js数组去重:过滤掉key对应的value值已经存在的数据-Qui-Note
原理懂了,先造个数组:

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;
 }

js数组去重:过滤掉key对应的value值已经存在的数据-Qui-Note
这样就循环过滤出我们想要的结果,不过有人会发现亮点:判断了j和新数组长度相等的情况下直接赋值了,大家可以考虑一下什么情况下两者会相等?没有这句话会不会成功?