芒果味的球 2019-08-10 17:26 采纳率: 76.5%
浏览 366
已采纳

关于JSON数组的小Demo,有木有高手


    var arr = [
        {id:1,      username:"EZ",      linkman:"张三"  },
        {id:2,      username:"EZ",      linkman:"张三" },
        {id:3,      username:"EZ",      linkman:"张三" },
        {id:4,      username:"鳄鱼",    linkman:"王五" },
        {id:5,      username:"EZ",      linkman:"李四" },
        {id:6,      username:"盖伦",    linkman:"张三" },
        {id:7,      username:"瑞文",    linkman:"张三"  },
        {id:8,      username:"小鱼人",  linkman:"王五"  },
        {id:9,      username:"小鱼人",  linkman:"王五"  }
    ];

   //将上面的arr 先根据username 去重,保留后面的数据
    //去重后的数据应该为
    var newarr = [
        {id:4,      username:"鳄鱼",    linkman:"王五"   },
        {id:5,      username:"EZ",      linkman:"李四"    },
        {id:6,      username:"盖伦",    linkman:"张三"    },
        {id:7,      username:"瑞文",    linkman:"张三"    },
        {id:9,      username:"小鱼人",  linkman:"王五"    }
    ];

    //最后统计 linkman    出现的次数
    var result = [
        {linkman:"王五", time:"2"},
        {linkman:"李四", time:"1"},
        {linkman:"张三", time:"2"},

    ];


  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2019-08-10 22:06
    关注

    这本质上不是 JSON 数组,而是 JS 的复杂对象,以 username 为 Key 通过一遍遍历完成统计,参考 demo 为:

    function sumup(){
       var arr = [
            {id:1,      username:"EZ",      linkman:"张三"  },
            {id:2,      username:"EZ",      linkman:"张三" },
            {id:3,      username:"EZ",      linkman:"张三" },
            {id:4,      username:"鳄鱼",    linkman:"王五" },
            {id:5,      username:"EZ",      linkman:"李四" },
            {id:6,      username:"盖伦",    linkman:"张三" },
            {id:7,      username:"瑞文",    linkman:"张三"  },
            {id:8,      username:"小鱼人",  linkman:"王五"  },
            {id:9,      username:"小鱼人",  linkman:"王五"  }
        ];
    
        var sumMap = {};
        for(var i=0;i<arr.length;i++){
            var temp = arr[i];
            var username = temp.username;
    
            //新记录,加入 sumMap 中
            if(sumMap[username] == undefined){
                var anewData = {};
                anewData.linkman = temp.linkman;
                anewData.time = 1;
                sumMap[username] = anewData;
            }else{
                //非新记录,累加
                var lastCount = sumMap[username].time;
                sumMap[username].time=lastCount+1;
            }
    
            //遍历打印sumMap
            console.log(sumMap);
        }
    }
    

    js 的对象可以用做 Map ,以 username 为 map 的 key,存在就累加 time ,不存在就新添加新属性。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 写uniapp时遇到的问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流