往常在对数组中的对象去重如:

 let  person = [
   { id : 1,text:1},
   { id : 2,text:2},
   { id : 3,text:3},
   { id : 1,text:4}   
]

要想将 id  重叠的 数据去重,我们通常会采用复杂的对数组循环判断的方式,但是在ES5出现reduce之后,我们可以采用reduce来对数组中的对象去重。

在 Array.prototype.reduce 方法中,可以传递四个参数:

previousValue : 初始值或上一次 回调函数的返回值;

currentValue : 本次循环(回调)将要执行的值;

index : "currentValue " 的索引值;

arr  : 数组本身

 

在使用reduce对数组去重一般只需要用到  previousValue  和 currentValue ;

 

实现过程如下:

  let  person = [
    { id:1 , text: 3},
    { id:2 , text: 4},
    { id:5 , text: 3},
    { id:1 , text: 2}  
  ];
    
  let obj = {};

  person = person.reduce( ( pre,cur ) => {
     obj[cur.id] ? "" : obj[cur.id] = true && pre.push(cur);
     return pre;
  },[]);

  console.log(person);

输出结果如下:

当然,也有可能需求是将 id 相同的部分的 text 组合成一个数组,实现过程如下:

let  person = [
        { id:1 , text: 3},
        { id:2 , text: 4},
        { id:5 , text: 3},
        { id:1 , text: 2},
        { id:2 , text: 5},
        { id:2 , text: 6}
    ];

    let obj = {};
    
    person = person.reduce( ( pre,cur ) => {
                if(obj[cur.id]){
                   pre.map(
                      item => item.id === cur.id ? item.text = Array.prototype.concat(item.text,cur.text): ''
                   );
                }else {
                   obj[cur.id] = true &&  pre.push(cur);
                }    
            return pre;
    },[]);

  console.log(person);        

输出结果如下:

 

如果对大家有用记得来github  点 star ,https://github.com/pppa1238yu 感激不尽~~!!!!!