zoukankan      html  css  js  c++  java
  • 项目遇到的问题总结(三):数组里面的对象重复了,要去重;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会改变原数组

  • 相关阅读:
    Gradle在大型Java项目上的应用
    Spring MVC 构建入门级 Web 应用程序
    大公司最喜欢问的Java集合类面试题
    在Java中正确使用注释
    Java的wait(), notify()和notifyAll()使用心得
    Java中HashMap和TreeMap的区别深入理解
    初识PGM图片
    VS2013报错 error MSB8031解决方法
    matconvnet在MATLAB2013配置过程中遇到的问题
    配置VLFeat-0.9.20+MATLAB2013a
  • 原文地址:https://www.cnblogs.com/myfirstboke/p/11319415.html
Copyright © 2011-2022 走看看