用简单的算法实现过滤数据的功能—众学

phone-->im-->sys_message.html

     在模板中执行对应的js,然后将过滤后的数据拿出来渲染:

  <%
        var dataObj = repeatMsg.showData(data);
        for (var key in dataObj) {
             %>

repeatMsg.showData(data)是主要的过滤方法。

var repeatMsg = (function(){
        var repeatObj = {};
        var dataMsg = [],dataMsgApp=[];
        repeatObj.showData = function(data){
            dataMsgApp=[];
            var len = dataMsg.length
            if(len==0 && data.length>0){
                repeatObj.setDataMsg(data);
                return dataMsg;
            }else{
                repeatObj.setDataMsg(data);
                return dataMsgApp;
            }
        };
        repeatObj.setDataMsg = function(data){
            for(var i = 0; i< data.length;i++){
                if(dataMsg.length == 0){
                    dataMsg.push(data[i]);
                }else{
                    var temp = true;
                    for(var j = 0; j< dataMsg.length;j++){
                        var dataMsgkey = repeatObj.getDataKey(dataMsg[j]);
                        var datakey = repeatObj.getDataKey(data[i]);
                        if(dataMsgkey == datakey){
                            temp = false;
                            break;
                        }
                    }
                    if(temp){
                        dataMsg.push(data[i]);
                        dataMsgApp.push(data[i]);
                    }
                }
            }
        };
        repeatObj.getDataKey = function(data){
            var type = data.extra.type;
            if(type == 'ms-0002' || type == "ms-0003"){
                var ms_extra_info = data.extra.ms_extra_info;
                return ms_extra_info.im_group_id+"_"+ms_extra_info.user_code;
            }  
            if(type == 'ms-0001'){
                return data.extra.ms_extra_info.user_code;
            }
            if(type == 'ms-0006'){
                return data.extra.group_id;
            }
            return "";
        };
        return repeatObj;
    })();

  以上代码的结构为var k = (function(){})(); 内部function的地位和k等价,所以在页面未关闭的情况下,function内部的变量的数据不会被初始化。

  geiDataKey()方法返回的值为每个类型的唯一ID(与主键不同,因为每生成一条系统消息就会产生一个新的主键,但是内容却很可能是相同的。)

  setDataMsg()方法是过滤的核心,它进行两层循环,第一层为基数,第二层的数据为过滤后的部分数据;然后将第一层的数据与第二层的数据进行对比,如果发现重复就跳出循环,并且不向dataMsg中添加数据,如果发现没有重复就向dataMsg中添加数据。

  showData()方法是返回过滤后的数据,dataMsgApp是在页面未关闭的情况下渲染新加入的验证消息;dataMsgApp在方法执行的时候会被初始化,所以只会有当前发送过来的新的一条验证消息。然后将此验证消息与之前dataMsg中的所有验证消息用同样的方法进行对比。

转载于:https://my.oschina.net/u/2357858/blog/496731

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值