项目遇到的问题总结(三):数组里面的对象重复了,要去重;reduce去重

      arr: [
        {
          key: "01",
          value: "乐乐"
        },
        {
          key: "02",
          value: "博博"
        },
        {
          key: "03",
          value: "淘淘"
        },
        {
          key: "04",
          value: "哈哈"
        },
        {
          key: "01",
          value: "乐乐"
        }, {
          key: "03",
          value: "淘淘"
        }
      ],

/用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值

    let obj = {};
    this.arr = this.arr.reduce(function(prev, item) {
     
      obj[item.key] ? "" : (obj[item.key] = 1 &&prev.push(item))
      return prev
; }, []);
//这里来解释一哈,reduce接受2个参数,一个函数,一个初始值,函数是必须的,用来遍历每个数组的的元素,后面那个【】可以不给,不给的话他的初始值就是这个数组的第一个元素,给了的话就是给的那个初始值,
三元运算符来判断是否重复,如果item.key存在则不作处理,也不向数组push,如果不存在则push
说白了还是利用对象的属性的唯一性去重一样

这里其实还可以用其他的循环来去重复的对象

比如(核心思想还是利用对象的属性的唯一性)、

    let obj={}
    let ll=[]
    this.arr.map((item)=>{
      if(!obj[item.key]){
        obj[item.key]=1
        ll.push(item)
      }
    })

打印出效果一样都去重了,当然上面的代码不好看,用逼格高的三元运算符来搞不用if else

    let obj={}
    let ll=[]
    this.arr.map((item)=>{
      obj[item.key] ? '' : (obj[item.key]=1&&ll.push(item))
    })
    console.log(ll,'去重后');
//看上去是不是更reduce差不多啊,哈哈

foreach一样可以,只要是数组循环都可以 filter也可以的  把上面的map换了就行

filter,map不会改变原数组 foreach会改变原数组

原文地址:https://www.cnblogs.com/myfirstboke/p/11319415.html