new Set( ) 数组去重 适用场景

项目场景:

在一个数组里有若干个对象,

var arr = [
            {name:'王',age:'22'},
            {name:'李',age:'16'},
            {name:'张',age:'55'},
            {name:'郝',age:'45'},
            {name:'赵',age:'33'},
            {name:'王',age:'22'},
          ]

 现在对数组 arr 进行去重


问题描述

  首先我首先联想到的就是简单易写的ES5 new Set( ); 

  代码如下: 

var newarr = [...new Set(arr)];
console.log(newarr);
//[
//  {name:'王',age:'22'},
//  {name:'李',age:'16'},
//  {name:'张',age:'55'},
//  {name:'郝',age:'45'},
//  {name:'赵',age:'33'},
//  {name:'王',age:'22'},
//]

发现去重后 并没有生效


原因分析:

new Set()  只对数组内是基本类型适用 所以无法去重 


解决方案:

1.利用reduce实现

      let obj = {};

      newarr = arr.reduce((cur,next) => { //next 每一项

        obj[next.name] ? "" : obj[next.name] = true && cur.push(next);

        return cur;

      },[]) //设置cur默认类型为数组,并且初始值为空的数组

      console.log(newarr);

猜你喜欢

转载自blog.csdn.net/weixin_63443983/article/details/128487810