芒果味的球 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条)

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站